概要
$TLEVEL は、入れ子の開いているトランザクションの数である、現在のトランザクション・レベルを含みます。発行された TSTART コマンドの数がトランザクション・レベルを決定します。
0 の $TLEVEL はデクリメントできません。$TLEVEL=0 が処理を実行しないとき、TROLLBACK (または TROLLBACK 1) が発行されます。$TLEVEL=0 のときに TCOMMIT を発行すると、<COMMAND> エラーが返されます。
トランザクションの最大レベル数は 255 です。255 のトランザクション・レベルを超えると、<TRANSACTION LEVEL> エラーになります。
この特殊変数は、SET コマンドを使用して変更することはできません。変更を試みると、<SYNTAX> エラーが返されます。
SQL と $TLEVEL
$TLEVEL は、以下のように SQL トランザクション文によっても設定できます。
$TLEVEL を共有で使用しているにもかかわらず、ObjectScript トランザクション処理と SQL トランザクション処理は異なり、また互換性もありません。アプリケーションは、同じトランザクション内のこれら 2 種類のトランザクション処理文を混同しないよう注意する必要があります。
例
以下の例では、TSTART が $TLEVEL をインクリメントし、各 TCOMMIT が $TLEVEL をデクリメントします。
WRITE !,"transaction level ",$TLEVEL // 0
TSTART
WRITE !,"transaction level ",$TLEVEL // 1
TSTART
WRITE !,"transaction level ",$TLEVEL // 2
TCOMMIT
WRITE !,"transaction level ",$TLEVEL // 1
TCOMMIT
WRITE !,"transaction level ",$TLEVEL // 0
以下の例では、TSTART を繰り返し呼び出すことで $TLEVEL をインクリメントし、各 TROLLBACK 1 が $TLEVEL をデクリメントします。
WRITE !,"transaction level ",$TLEVEL // 0
TSTART
WRITE !,"transaction level ",$TLEVEL // 1
TSTART
WRITE !,"transaction level ",$TLEVEL // 2
TROLLBACK 1
WRITE !,"transaction level ",$TLEVEL // 1
以下の例では、TSTART を繰り返し呼び出すことで $TLEVEL をインクリメントし、TROLLBACK が $TLEVEL を 0 にリセットします。
WRITE !,"transaction level ",$TLEVEL // 0
TSTART
TSTART
TSTART
WRITE !,"transaction level ",$TLEVEL // 3
TROLLBACK
WRITE !,"transaction level ",$TLEVEL // 0
以下の例は、$TLEVEL が 0 の場合に、TROLLBACK コマンドが効果がないことを示します。
WRITE !,"transaction level ",$TLEVEL // 0
TROLLBACK
WRITE !,"transaction level ",$TLEVEL // 0
TROLLBACK 1
WRITE !,"transaction level ",$TLEVEL // 0
TROLLBACK
WRITE !,"transaction level ",$TLEVEL // 0