- PR -

oracleの排他チェック

1
投稿者投稿内容
カウンター
大ベテラン
会議室デビュー日: 2004/02/19
投稿数: 123
投稿日時: 2004-03-02 14:26
いつもお世話になっております。

DBがoracle9iの環境で Serializable によってロックをかけている場合に、以下のコードだと
ロックが解除されるまで、☆のところで実行待ちになってしまいます。
これを避けるために、☆のところでロックがかかっている場合には
”他のユーザーが使用中です。”といったメッセージをだしてRollbackを実行したいのですが
なにか良い方法はありますでしょうか?

ちなみに、(IsolationLevel.Serializable)を指定せずに Catch e As Exception で
ORA-00054をキャッチしてRollbackしようかとも考えたのですが、今回は他の方法を探るべく
あえて(IsolationLevel.Serializable)した場合の処理を考えております。

よろしくお願いいたします。

'--トランザクション開始
myTrans = oraCon.BeginTransaction(IsolationLevel.Serializable)
cmd.Transaction = myTrans
Try
cmd.Connection = oraCon

'登録
cmd.CommandText = "INSERT INTO TEST (A,B) VALUES(" & txtA.Text & ",'" & txtB.Text & "' )"
cmd.ExecuteScalar()  ←☆
myTrans.Commit()

Catch e As Exception

myTrans.Rollback()
MsgBox(e.ToString() & ": DBは更新できませんでした。")
Exit Sub

End Try
1

スキルアップ/キャリアアップ(JOB@IT)