[英]ORACLE PL/SQL: Testing SELECT FOR UPDATE in Oracle SQL Developer
我們目前正在嘗試實現SELECT FOR UPDATE以鎖定行。 如果我跑:
SELECT * FROM data where rowid = 'AAAQA5AAGAACNbEAA1' FOR UPDATE;
SELECT * FROM data where rowid = 'AAAQA5AAGAACNbEAA1' FOR UPDATE NOWAIT;
我在ORACLE SQL Developer中得不到任何回報。 這不應該給我一個錯誤嗎? 這與使用相同的用戶ID有關嗎?
你是什么意思“我什么也得不回”? 你是說這兩個查詢都沒有返回任何行嗎? 如果是這樣,那意味着表中沒有具有該ROWID的行。 你的意思是第一個(或第二個)陳述永遠不會回來嗎? 如果是,則會阻止會話等待獲取鎖定。
鎖定由會話持有。 如果兩個語句在同一會話中運行,則第二個語句將成功,因為第一個語句已獲得鎖定。 如果第二個語句在恰好由同一用戶打開的另一個會話中運行,則應生成該行已被另一個會話鎖定的異常。
您在已在該事務中鎖定的表上請求鎖定。
您需要從不同的連接(即不同的事務)運行第二個SELECT
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.