频道栏目
首页 > 资讯 > Oracle > 正文

oracle锁的应用(DMS_LOCK)

17-07-24        来源:[db:作者]  
收藏   我要投稿
目的:为了防止多个进程同时调用一个过程

前提:授予用户使用锁的权限: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;

 

相关TAG标签
上一篇:win10下安装mysql-5.7.19-winx64
下一篇:mysql sql语句大全
相关文章
图文推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站