$TLEVEL (ObjectScript)
構文
$TLEVEL
$TL
概要
$TLEVEL は、入れ子の開いているトランザクションの数である、現在のトランザクション・レベルを含みます。発行された TSTART コマンドの数がトランザクション・レベルを決定します。
-
各 TSTART は $TLEVEL を 1 つインクリメントします。
-
各 TCOMMIT は $TLEVEL を 1 つデクリメントします。
-
各 TROLLBACK 1 は $TLEVEL を 1 つデクリメントします。
-
TROLLBACK は $TLEVEL を 0 にリセットします。
0 の $TLEVEL はデクリメントできません。$TLEVEL=0 が処理を実行しないとき、TROLLBACK (または TROLLBACK 1) が発行されます。$TLEVEL=0 のときに TCOMMIT を発行すると、<COMMAND> エラーが返されます。
トランザクションの最大レベル数は 255 です。255 のトランザクション・レベルを超えると、<TRANSACTION LEVEL> エラーになります。
この特殊変数は、SET コマンドを使用して変更することはできません。変更を試みると、<SYNTAX> エラーが返されます。
SQL と $TLEVEL
$TLEVEL は、以下のように SQL トランザクション文によっても設定できます。
-
最初の START TRANSACTION は、$TLEVEL を 1 に設定します。追加の START TRANSACTION 文は、$TLEVEL に影響を与えません。
-
各 SAVEPOINT 文 は $TLEVEL を 1 つインクリメントします。
-
ROLLBACK TO SAVEPOINT pointname 文は、$TLEVEL をデクリメントします。デクリメントの量は、指定するセーブポイントによって決定します。
-
COMMIT は $TLEVEL を 0 にリセットします。
-
ROLLBACK は $TLEVEL を 0 にリセットします。
$TLEVEL を共有で使用しているにもかかわらず、ObjectScript トランザクション処理と SQL トランザクション処理は異なり、また互換性もありません。アプリケーションは、同じトランザクション内のこれら 2 種類のトランザクション処理文を混同しないよう注意する必要があります。
トランザクション・レベルとターミナル・プロンプト
既定では、$TLEVEL がターミナル・プロンプトから実行されるコマンド行またはプログラムの最後で 0 よりも大きい場合は、現在のトランザクション・レベルがターミナル・プロンプトの接頭語として表示されます。
-
$TLEVEL=0 の場合は、ターミナル・プロンプトは現在のネームスペース名を表示します (既定)。例えば、USER> です。
-
$TLEVEL>0 の場合は、ターミナル・プロンプトではネームスペース名の前に TLn: 接頭語が表示されます。n は 1 ~ 255 までの整数です。例えば、TL4:USER> です。
このターミナル・プロンプトは、ZNSPACE の説明に従って構成できます。
SQL シェル・プロンプトには、現在のトランザクション・レベルは表示されません。SQL シェルの終了時には、現在の $TLEVEL 値がターミナル・プロンプトに表示されます。これには、SQL シェルを起動する前に設定されたトランザクション・レベルと SQL シェル内で発生したトランザクション・レベルの変更が含まれる場合があります。
例
以下の例では、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