ITPub博客

首页 > 数据库 > Oracle > Oracle Form数据块实现同时只有一个人锁定修改数据

Oracle Form数据块实现同时只有一个人锁定修改数据

原创 Oracle 作者:scy072 时间:2015-02-11 15:56:39 0 删除 编辑

在上一篇中文章中,如果建立了数据块的四个触发器,并在触发器中调用了程序单元中对应数据块名的包,则在这个包中还需调用专门用于实现插入行、锁定行、更新行、删除行的包MAIN_PVT。在这个包MAIN_PVT中主要调用的是数据块中的存储过程实现插入行、锁定行、更新行、删除行的功能:

PACKAGE BODY main_pvt IS

  /*=====================================
  ** PROCEDURE:   insert_row()
  **=====================================*/
  PROCEDURE insert_row IS
 
  BEGIN
 
    fnd_standard.set_who;
 
    IF :main_v.id IS NULL THEN
      SELECT main_s.nextval        --序列作为唯一值赋值给数据块的ID字段
        INTO :main_v.id
        FROM dual;
    END IF;
  
    cux_main_pkg.insert_row(x_row_id             => :main_v.row_id,
                                             x_insp_header_id     => :main_v.id,
                                             p_org_id             => :main_v.org_id,
                                             p_doc_type_class     => :main_v.doc_type_class,
                                             p_inspection_number  => :main_v.external_check_list,
                                             p_status             => :main_v.status,
                                             p_oe_header_id       => :main_v.oe_header_id);
end insert_row;

/*=====================================
  ** PROCEDURE:   lock_row()
  **=====================================*/
  PROCEDURE lock_row IS
 
    i NUMBER := 0;
  BEGIN
 
    LOOP
      BEGIN
        i := i + 1;
        cux_main_pkg.lock_row(p_insp_header_id     => :main_v.id,
                                               p_org_id             => :main_v.org_id,
                                               p_doc_type_class     => :main_v.doc_type_class,
                                               p_inspection_number  => :main_v.external_check_list,
                                               p_status             => :main_v.status,
                                               p_oe_header_id       => :main_v.oe_header_id);
        RETURN;    --如果成功锁住记录,没有发生异常,则跳出整个lock_row函数或过程,不再往下执行
      EXCEPTION
        WHEN app_exception.record_lock_exception THEN
          app_exception.record_lock_error(i);
      END;
    END LOOP;
 
  END lock_row;

/*=====================================
  ** PROCEDURE:   update_row()
  **=====================================*/
  PROCEDURE update_row IS
  BEGIN
 
    fnd_standard.set_who;
  
    cux_main_pkg.update_row(p_insp_header_id     => :main_v.insp_header_id,
                                             p_org_id             => :main_v.org_id,
                                             p_doc_type_class     => :main_v.doc_type_class,
                                             p_inspection_number  => :main_v.external_check_list,
                                             p_status             => :main_v.status,
                                             p_oe_header_id       => :main_v.oe_header_id
                                             );
  END update_row;

  /*=====================================
  ** PROCEDURE:   delete_row()
  **=====================================*/
  PROCEDURE delete_row IS
  BEGIN
    cux_main_pkg.delete_row(p_insp_header_id => :main_v.insp_header_id);
  END delete_row;

END main_pvt;

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/26189725/viewspace-1433465/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2015-01-23

  • 博文量
    14
  • 访问量
    20649