For Update句


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;

参考にしたページ

http://oracle.se-free.com/dml/10_forupdate.html