Skip to main content

This is documentation for Caché & Ensemble. See the InterSystems IRIS version of this content.Opens in a new tab

For information on migrating to InterSystems IRISOpens in a new tab, see Why Migrate to InterSystems IRIS?

$TLEVEL

トランザクション処理に対する、現在の入れ子レベルを含みます。

Synopsis

$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 シェル内で発生したトランザクション・レベルの変更が含まれる場合があります。

MV コマンド (引数なし) は、インタラクティブな MultiValue シェルを開始し、開いているトランザクションを即座にロールバックします。MultiValue シェル終了時の現在の $TLEVEL 値は 0 です。MV コマンドを MultiValue コマンド行の引数と使用しても現在のトランザクション・レベルには影響を与えません。

以下の例では、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

関連項目

FeedbackOpens in a new tab