[an error occurred while processing this directive]
[an error occurred while processing this directive]
![]()
![]() ![]() インターシステムズ(日) └日本語ドキュメント インターシステムズ(US) (有)エムブイビイ ダイナシステム(株) Googleグループ(英語) Googleグループ(日本語) George James Software cache'infoアーカイブ 【広告】
|
|
関連する複数の処理を一つの処理単位としてまとめたもの。金融機関のコンピュータシステムにおける入出金処理のように、一連の作業を全体として一つの処理として管理するために用いる。 トランザクションとして管理された処理は「すべて成功」か「すべて失敗」のいずれかであることが保証される。例えば、資金移動システムをコンピュータで処理する場合、出金処理と入金処理は「どちらも成功」か「どちらも失敗」のどちらかであることが要求される。「出金に成功して入金に失敗」すると、出金された資金が宙に浮いてしまうからである。 |
この例の「出金と入金」や「売り上げと在庫」、「」のように、どちらかの処理が成功して、もう一方の処理が失敗すると残高や在庫などに問題が発生してしまいます。たとえば先日の東証のトラブルはトランザクション処理がうまくいかなかった例だと思われます。yahooニュース
キャシェーでトランザクションを処理するには、以下のコマンドを使用します。
Cache' Object Script | Cache' SQL | |
トランザクションの開始 | TSTART | %BEGTRANS |
トランザクションのコミット(確定) | TCOMMIT | COMMIT WORK |
トランザクションのロールバック(取消) | TROLLBACK | ROLLBACK WORK |
トランザクションの開始をTSTARTコマンドで宣言し、TCOMMITコマンドでトランザクションを確定させます。処理中にエラーがあった場合はTROLLBACKコマンドでトランザクションを取り消し、トランザクション前の状態にデータベースを戻します。
ためしにCache' ターミナルで実行してみます。
>SET ^A=0 >TSTART >SET ^A=1 >TCOMMIT >WRITE ^A 1 >TSTART >SET ^A=2 >TROLLBACK >WRITE ^A 1 > |
このように、トランザクションがコミットした場合は変更が反映され、ロールバックした場合は変更が取り消されます。
ただし、トランザクション中のグローバルは別プロセスからの変更を含めたアクセスが可能です。そのため、LOCKコマンドを使用して他のユーザからの変更を防ぐ必要があります。
ルーチンとしてまとめると次のような感じになります。
TRAN
; SET $ZT="ERR" ;エラートラップ設定 TSTART ;トランザクション開始 LOCK +^A ;ロック SET ^A=100 LOCK -^A ;ロック解除 TCOMMIT ;トランザクション確定 QUIT ERR ; TROLLBACK ;トランザクション取消 LOCK -^A ;ロック解除 QUIT |
また、トランザクションは入れ子にすることができます。トランザクションの階層は$TLEVELシステム変数を参照することで確認できます。