最近碰到一種情況,需要限制某個儲存過程只能有乙個程序在執行,上乙個執行完畢後下乙個再執行。也就是類似與程式開發中的執行緒同步問題。
彙總乙個下,可以通過如下方法來實現。
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;
這樣可以實現一般的阻塞儲存過程。 ORACLE 009 儲存過程加鎖
彙總乙個下,可以通過如下方法來實現。1 設定乙個變數,或者表中的某個欄位為標識位,執行時設定為某個值,執行完後再設定為原來的值。這種方式的要求設定標識位的地方和判斷這個標識位的地方間隔時間不能太長,否則還是達不到要求。2 使用行鎖來實現。比如建乙個表t test,插入幾條資料。在儲存過程開始的地方 ...
儲存過程模擬加鎖解鎖
alter procedure dbo pro get sys ordr lock info ordr head seq 編號,ordr typ cd varchar 20 asbegin select count 1 as is lock from t sys ordr lock where or...
Oracle儲存過程呼叫儲存過程
oracle儲存過程呼叫有返回結果集的儲存過程一般用光標的方式,宣告乙個游標,把結果集放到游標裡面,然後迴圈游標 declare newcs sys refcursor cs1 number cs2 number cstype table rowtype table列的個數和newcs返回的個數一樣...