程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> Oracle教程 >> ORACLE—009:存儲過程加鎖

ORACLE—009:存儲過程加鎖

編輯:Oracle教程

ORACLE—009:存儲過程加鎖


最近碰到一種情況,需要限制某個存儲過程只能有一個進程在執行,上一個執行完畢後下一個再執行。也就是類似與程序開發中的線程同步問題。

匯總一個下,可以通過如下方法來實現。

1、設置一個變量,或者表中的某個字段為標識位,執行時設置為某個值,執行完後再設置為原來的值。

這種方式的要求設置標識位的地方和判斷這個標識位的地方間隔時間不能太長,否則還是達不到要求。

2、使用行鎖來實現。

比如建一個表t_test,插入幾條數據。 在存儲過程開始的地方

select s.id

into v_sn

from t_test s for update;


然後在存儲過程結束時,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;

這樣可以實現一般的阻塞存儲過程。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved