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

在上一篇中文章中,如果建立了数据块的四个触发器,并在触发器中调用了程序单元中对应数据块名的包,则在这个包中还需调用专门用于实现插入行、锁定行、更新行、删除行的包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博客 ” ,链接:http://blog.itpub.net/26189725/viewspace-1433533/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/26189725/viewspace-1433533/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值