oracle 锁的应用(DMS_LOCK)

目的:为了防止多个进程同时调用一个过程

前提:授予用户使用锁的权限:grant execute on dbms_lock to username(apps);

使用:

declare

l_lock_name varchar2(100);--锁的名字(一般是由包名+存储过程名+参数组成)

l_lockhandle  varchar2(100);--锁标识

l_lock_output number;

begin

l_lock_name :=g_pkg_name||'.'||g_procedure_name||to_char(p_org_id);--锁的名字

/*

给锁分配唯一的标识

*/

dbms_lock.allocate_unique(lockname=>l_lock_name,

                                            lockhandle=>l_lockhandle);

/*

请求一个锁:

l_lock_output 返回值:0--成功,1--超时,2--死锁,3--参数错误,4--已经分配锁重复申请,5---无效的lock_handle

*/

l_lock_output:=dbms_lock.request(l_lockhandle,

                                                        dbms_lock.x_mode,

                                                        5,--等待请求锁的时间

                                                        FALSE,---COMMIT OR ROLLBACK 是否释放锁,默认FALSE,共享模式下设置true

                                                        );

if l_lock_output<>0 then

fnd_file.put_line(fnd_file.log,'主程序正在运行,不能重复提交');

end if;

/*

业务代码

*/

/*

释放锁

*/

l_lock_output:=dbms_lock.release(l_lockhandle);

--exception 也要释放锁

exception when others then

l_lock_output:=dbms_lock.release(l_lockhandle);

end;




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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值