您好,UncleToo欢迎您!  为了更好的浏览本站,请使用高版本浏览器
RSS  Tag     设为首页 | 加入收藏
 您所在的位置:首页 > 数据库技术 > Oracle

ORACLE:存储过程加锁,实现单进程执行

作者:未知  来源:互联网  日期:2015-01-29 21:56:09
收藏  评论:( 0 )  阅读:427

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

可以通过如下方法来实现。

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;

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



除非特别声明,本站所有PHP教程及其他教程/文章均为原创、翻译或网友投稿,版权均归UncleToo中文网所有, 转载请注明作者及出处。
原文网址:http://www.uncletoo.com/html/oracle/1100.html
读完这篇文章后,你是否有所收获? 分享是一种生活的信念!
  • 0
  • 0
我来说两句
更多>>网友评论