PB 電子会議室
発言No. | 更新日 | 題名(クリックすると発言内容と関連するコメントが表示されます) |
---|---|---|
5647 | 99/03/26 12:48:09 | RE(2):PB6.5: ORACLE8での行ロックの動的な解除について By ayuko |
5631 | 99/03/25 18:42:30 | RE(1):PB6.5: ORACLE8での行ロックの動的な解除について By Taka |
5615 | 99/03/25 12:43:33 | PB6.5: ORACLE8での行ロックの動的な解除について By ayuko |
カテゴリ:データベース
日付:1999年03月25日 18:42 発信者:Taka
題名:RE(1):PB6.5: ORACLE8での行ロックの動的な解除について
こんばんは。
>クラサバのアプリを開発しています。行ロックの指定は
>dw_input.Object.Datawindow.Table.Select =
>dw_input.Object.Datawindow.Table.Select+ \"FOR UPDATE NOWAIT\" というようにソースで
>行っているんですが、行ロックの解除を rollback(to savepointを含む)、commitによらずに可能
>でしょうか。
SELECT FOR UPDATE は、COMMIT/ROLLBACKでしか開放できないと思います。
>ここでもう関連して1つ質問なのですが
(中略)
>クラサバにおいて上記のような作りは(在庫残数を正確に表示しなければならないために、商品入力時に
>ロックをかけてしまうという作り)一般的におかしいのではないかと思い始めています。
>
>登録ボタンを押下の場合に行ロックをかけ、その時に在庫残数を再度チェックするという方法の方が妥当なの
>でしょうか
厳密な正確さを要求するようなシステムを開発したことがないのでわかりませんが、
特に FOR UPDATE や更新直前のチェックはしなくても、データウィンドウが持っている
「更新特性」の設定により、ある程度はカバーできます。
INSERTは別ですが、UPDATEとDELETEに関して以下の3パターンが選べます。
(1) 主キーのみ
(2) 主キー + 変更されたカラムのみ
(3) 主キー + 更新可能な全カラム
これらは、発行される UPDATEやDELETE に動的に付けられる WHERE句のパターンです。
SELECTされた時点でのオリジナルデータ(変更前の値)が WHERE句に付加されます。
SELECTしてから誰もデータを変更していなければ、自分が修正した内容で保存できます。
もしこの間に誰かがデータを変更していると、自動的に
「検索した時のデータと変わっている」旨のメッセージが表示され、保存はキャンセルされます。
データウィンドウが自動的にこの処理をやってくれるので、私は上記(3)を使っています。
でもこの方式では行単位で判定されるので、SELECTで10件読んできて、自分は1行目のみ、
他の人が2行目のみを更新した場合には、どちらも正常終了になるので要注意です。
参考にならなかったらすみません。
付加情報:
PowerBuilder Version (記載なし)
Client SoftWare
OS Windows95
DBMS Oracle SQL*Net 8
Browser (記載なし)
Server SoftWare
OS (記載なし)
DBMS Oracle 8.0
WebServer (記載なし)
Copyright © 2013 Power Future Co., Ltd.