Oracleで、同時に2つ以上のセッションが同一のSelect文を起動した場合、先にSelectした方の処理が終わるまで、後のSelectを待ち状態としたいです。
処理の流れは以下の通りです。
1.テーブルAの項目XをSelectで取得
2.Xに+1し、新規レコードとしてテーブルAにINSERT(項目XはX+1の値)
Xの値を重複させないことが目的です。
なお、テーブルAの主キーはXではありません。XはNullを許可しています。
1.のSelectで取得した結果Nullの場合は0001をセットします。
**追記:**表現が一部不正確な部分がございましたので、訂正いたします。
SELECTで取得される項目XがNULLなのではなく、SELECTで取得するWHERE条件で1レコードもヒ ットしなかった場合になります。
上記の場合、
テーブルAに取得すべきXが存在する場合は、Select ~For Update で解決できますが、NULLの場合に
解決が出来ません。
NULLの場合は、2つのセッションで同時に処理を起動すると、どちらの結果も「0001」となってしまい重複してしまいます。
表ロックも検討しましたが、Selectを止める術は見つかりませんでした。
環境は以下の通りです。
・Windows2012Server R2
・Oracle 12c
・Java6
ご不明点等ございましたら追加確認いたしますので、ご指示いただければ幸いです。
以上よろしくお願いいたします

回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/02/14 01:46
2018/02/14 02:07
2018/02/14 02:24