ORACLE—009:預存程序加鎖,oracle009預存程序

來源:互聯網
上載者:User

ORACLE—009:預存程序加鎖,oracle009預存程序

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

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

1、設定一個變數,或者表中的某個欄位為標識位,執行時設定為某個值,執行完後再設定為原來的值。

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

2、使用行鎖來實現。

比如建一個表t_test,插入幾條資料。 在預存程序開始的地方

select s.idinto v_snfrom 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;

這樣可以實現一般的阻塞預存程序。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.