oracleのFor Updateについてのまとめ
ロックが解除されるまで待つ
select NAME_ID from TEST_TABLE where NAME_ID = 'harada' for update;
ロックされていたらエラー
select NAME_ID from TEST_TABLE where NAME_ID = 'harada' for update nowait ;
10秒待機してロックが解除されなければエラー
select NAME_ID from TEST_TABLE where NAME_ID = 'harada' for update wait 10;
ロックされている行は無視してロックされていない行のみを返す。
select name_id from test_table for update skip locked
指定したテーブルのみロックする。下の例ではTEST_TABLEテーブルのみロックする。
※ちなみにOF句でのカラムの指定は適当でよい。(そのカラムのみロックされるということではない)
select NAME_ID from TEST_TABLE,TEST_TABLE2 where NAME_ID = 'harada' for update of TEST_TABLE.NAME_ID;
参考にしたページ