您好,欢迎来到华佗养生网。
搜索
您的当前位置:首页ORACLE—009:存储过程加锁

ORACLE—009:存储过程加锁

来源:华佗养生网


最近碰到一种情况,需要某个存储过程只能有一个进程在执行,上一个执行完毕后下一个再执行。也就是类似与程序开发中的线程同步问题。 汇总一个下,可以通过如下方法来实现。 1、设置一个变量,或者表中的某个字段为标识位,执行时设置为某个值,执行完后

最近碰到一种情况,需要某个存储过程只能有一个进程在执行,上一个执行完毕后下一个再执行。也就是类似与程序开发中的线程同步问题。

汇总一个下,可以通过如下方法来实现。

1、设置一个变量,或者表中的某个字段为标识位,执行时设置为某个值,执行完后再设置为原来的值。

这种方式的要求设置标识位的地方和判断这个标识位的地方间隔时间不能太长,否则还是达不到要求。

2、使用行锁来实现。

比如建一个表t_test,插入几条数据。 在存储过程开始的地方

select s.id

into v_sn

from t_test s for update;


v_sn-是定义的变量,因为在存储过程中直接select for update这种形式的话,会编译错误,所以需要加上into。

然后在存储过程结束时,commit或者rollback。当然为了更保险,可使用异常捕获。

当然为了防止死锁,可以在for update后加上wait 时间。这样到了这个时间这个存储过程会报异常并结束,防止长时间锁住。

具体脚本如下:

create or replace procedure test_pro is
 v_sn varchar2;
 begin
 
 select s.id 
 into v_sn
 from t_test s for update wait 10;--10s
 
 --自己的执行脚本
 
 commit;--或者rollback;
 
 EXCEPTION
 WHEN OTHERS THEN
 BEGIN
 ROLLBACK;
 END;
end test_pro;

这样可以实现一般的阻塞存储过程。

Copyright © 2019- huatuo7.cn 版权所有 湘ICP备2022005869号-9

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务