[Seasar-user:9403] Re: [DBFlute]JOIN 時の lockForUpdate について

kubo [E-MAIL ADDRESS DELETED]
2007年 7月 24日 (火) 18:21:44 JST


久保です。

米原さん、こんにちは

> DBfluteにて、lockForUpdateのテーブル指定
> (FOR UPDATE OF 表.列名)
> を使用したい、との要件が挙がっています。
> 
> 具体的には、「setupSelectXXX」にて外部TBLを結合して、
> さらに「lockForUpdate」にてロックを掛けた場合、
> 現状OF指定が無いため、Oracleでは、ローカルテーブルも
> 外部テーブルも(select対象の全てのTBL)lockが掛かって
> しまいます。
> よって現状、外出しにするか、ロックのみ別SQLにするか
> ということになると思います。
> 
> DBFlute(CB)にてロックするテーブルを指定、もしくは
> ローカルテーブルのみロックするなど、対応可能でしょうか?

なるほど、込み入った機能を使い始めましたね。。。

lockForUpdateの仕様としては、
基本的には「ローカルテーブルのみLock」にしたいと考えていましたが、
Oracle上の厳密な挙動を自分が把握していませんでした。


申し訳ありませんが、Oracleの挙動に関して確認させて下さい。

Oracleに関して

 for update        → 結合している全てのTableをLock
 for update of xxx → 指定されたColumnが定義されているTableをLock
という認識で合っていますでしょうか?

外部結合(left outer join)を利用したSelectでも
「for update of xxx」は利用できますでしょうか?
(文法エラーになったりしないかどうか)

「for update of xxx」のxxxに指定する列は主キーでしょうか?
(他の列も指定できるとしても主キーを指定するのが一般的でしょうか???)


もし、問題なさそうであれば、lockForUpdate()時は
for update of xxxを出力することを検討しようかと思いますので
もし知っていれば情報提供して頂けるとありがたいです。





Seasar-user メーリングリストの案内