oracle select … for update

來源:互聯網
上載者:User
 select ... for update nowait
其中nowait是可選項。
此子句的意思就像他的字面意思,也就是說現在執行的select操作是為了本事務中的後續的update服務的。這時候系統會試圖鎖定查詢出來的記錄,不
允許其他事務修改它們。如果指定了nowait,則系統如果無法鎖定記錄,就會直接報錯,並不會等待其他佔有資源的事務釋放資源。我這有一些我做的測試結

事務A:Select  *  From  Test_A  Where  ID = ’01’  For  Update  NoWait;
事務B:Select  *  From  Test_A  Where  ID = ’01 ’  For  Update ;
事務C:Update  Test_A  Set  Name = ’Test_01’  Where  ID = ‘01’ ;
執行順序        執行結果
首先        然後        執行結果
----            ----            ----
事務A        事務A        系統報錯:ORA-00054: 資源正忙,要求指定 NOWAIT
事務A        事務B        事務B掛起,等待事務A釋放資源
事務A        事務C        事務C掛起,等待事務A釋放資源
事務B        事務A        系統報錯:ORA-00054: 資源正忙,要求指定 NOWAIT
事務B        事務B        事務B掛起,等待事務A釋放資源。(原文有問題,應該是等待前一個事務B釋放資源)
事務B        事務C        事務C掛起,等待事務B釋放資源
事務C        事務A        系統報錯:ORA-00054: 資源正忙,要求指定NOWAIT
事務C        事務B        事務B掛起,等待事務C釋放資源

不過在OEM中的PL SQL WORKSHEET中執行的話,如果執行倒數第2個實驗,執行第2個事務A只有執行超過3次後,OEM才會報錯,前幾次OEM好象是忽略此操作。
--------------------------------------------------------------------------------------------------------------
在多數情況下,提取迴圈中所完成的處理都會修改由遊標檢查出的行,PL/SQL提供了進行這樣處理的一種文法。
這種文法包括兩部分——在遊標聲明部分的FOR UPDATE子句和在UPDATE或DELETE語句中的WHERE CURRENT OF 子句。
通常,SELECT操作將不會對正處理的行執行任何鎖定設定,這使得串連到該資料庫的其他會話可以改變正在選擇的資料。

是,結果集仍然是一致性的。當確定了活動集以後,在執行OPEN的時刻,ORACLE會截取下該表的一個快照。在此時刻以前所提交的任何更改操作都會在活
動集中反映出來。在此時刻以後所進行的任何更改操作,即使已經提交了它們,都不會被反映出來,除非將該遊標重新開啟。但是使用FOR UPDATE子句,
在OPEN返回以前的活動集的相應行上會加上互斥鎖,這些鎖會避免其他的會話對活動集中的行變更。直到整個事務被提交為止。

樣本:
DECLARE
CURSOR C_CUR IS SELECT * FROM STUDENDS FOR UPDATE OF XM;
BEGIN
OPEN C_CUR;
WHILE C_CUR%FOUND LOOP

UPDATE STUDENDS SET XM='AA'||XM WHERE CURRENT OF C_CUR;

END LOOP;
CLOSE C_CUR;
COMMIT;
END;

需要注意的是:1、UPDATE語句僅更新在遊標聲明的FOR UPDATE子句處列出的列。如果沒有列出任何列,那麼所有的列都可以更新。
2、樣本中的COMMIT是在提取迴圈完成以後才完成的,因為COMMIT將釋放由該會話持有的所有鎖。因為FOR UPDATE子句獲得了鎖,所以COMMIT將釋放這些鎖。當鎖釋放了,該遊標就無效了。所以後繼的提取操作都將返回ORACLE錯誤。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.