SET TRANSACTION

SET TRANSACTION ステートメントは、現行の作業単位の分離レベル、 読み取り専用属性、または診断領域サイズを設定します。

呼び出し

このステートメントは、アプリケーション・プログラムに組み込むことも、 対話式に呼び出すことも可能です。これは、動的に準備できる実行可能ステートメントです。

権限

ステートメント内のグローバル変数を参照する場合は、ステートメントの権限 ID が保持する特権に、少なくとも次のいずれか 1 つが含まれなければなりません。

  • ステートメント内で識別されるグローバル変数に対して、
    • そのグローバル変数に対する READ 特権
    • そのグローバル変数を含むライブラリーに対する *EXECUTE システム権限
  • データベース管理者権限

構文

構文図を読む構文図をスキップする
>>-SET TRANSACTION---------------------------------------------->

   .-,-----------------------------------------.       
   V                    .-SERIALIZABLE-----.   | (1)   
>----+-ISOLATION LEVEL--+-NO COMMIT--------+-+-+---------------><
     |                  +-READ UNCOMMITTED-+ |         
     |                  +-READ COMMITTED---+ |         
     |                  '-REPEATABLE READ--' |         
     | .-READ ONLY--.                        |         
     +-+-READ WRITE-+------------------------+         
     '-DIAGNOSTICS SIZE--+-integer--+--------'         
                         '-variable-'                  

注:
  1. ISOLATION LEVEL 文節は 1 つだけ指定でき、 READ WRITE または READ ONLY 文節はどちらか一方を 1 つだけ指定でき、 DIAGNOSTICS SIZE 文節は 1 つだけ指定できます。

説明

ISOLATION LEVEL
トランザクションの分離レベルを指定します。 ISOLATION LEVEL 文節を指定しなかった場合は、ISOLATION LEVEL SERIALIZABLE が暗黙指定されます。
NO COMMIT
分離レベル NC (COMMIT(*NONE)) を指定します。
READ UNCOMMITTED
分離レベル UR (COMMIT(*CHG)) を指定します。
READ COMMITTED
分離レベル CS (COMMIT(*CS)) を指定します。
REPEATABLE READ
分離レベル RS (COMMIT(*ALL)) を指定します。
SERIALIZABLE
分離レベル RR (COMMIT(*RR)) を指定します。
READ WRITE または READ ONLY
このトランザクションでデータ変更操作が許されるかどうかを指定します。
READ WRITE
すべての SQL 操作が許されることを指定します。 ISOLATION LEVEL READ UNCOMMITTED を指定した場合以外は、これがデフォルト値です。
READ ONLY
SQL データを変更しない SQL 操作のみが許されることを指定します。 ISOLATION LEVEL READ UNCOMMITTED を指定した場合は、これがデフォルト値です。
DIAGNOSTICS SIZE
現在のトランザクションに対する GET DIAGNOSTICS 条件領域の最大値を指定します。 GET DIAGNOSTICS ステートメント情報項目 MORE は、 ステートメントが現行トランザクションの条件領域の最大数を超過する場合、 現行のステートメントに関して 'Y' に設定されます。 診断領域の最大サイズは 90K です。 指定する条件領域の最大数は、1 から 32767 までの値でなければなりません。
integer
現在のトランザクションに対する条件領域の最大値を指定する整数定数。
variable
現在のトランザクションに対する条件領域の最大値を含む変数を識別します。 変数はゼロのスケールの数値変数でなければならず、標識変数が続いてはなりません。

SET TRANSACTION の有効範囲: SET TRANSACTION ステートメントは、 そのプロセスの現行活動化グループの SQL ステートメントの分離レベルを設定します。 その活動化グループのコミットメント制御の有効範囲がそのジョブの範囲である場合、 SET TRANSACTION ステートメントは同一のジョブ・コミット有効範囲を持つ他の活動化グループすべての 分離レベルを設定します。

SQL ステートメント内に分離節が指定されている場合、 その分離レベルがトランザクション分離レベルをオーバーライドし、動的 SQL ステートメントに使用されます。

SET TRANSACTION ステートメントの有効範囲は、そのステートメントが実行される文脈に基づいています。 トリガーで SET TRANSACTION ステートメントが実行される場合 は、指定した分離レベルは、別の SET TRANSACTION ステートメントが実行さ れるか、またはそのトリガーが終了するかのいずれかが起こる まで、後続のすべての SQL ステートメントに適用されます。 SET TRANSACTION ステートメントがトリガーの外部で実行される場合は、指定し た分離レベルは、COMMIT または ROLLBACK 操作が行われるまで、後続のすべ ての SQL ステートメントに適用されます (ただし、トリガー内にあって、SET TRANSACTION の後で 実行されるステートメントを除きます)。

分離レベルの詳細について は、分離レベルを参照してください。

SET TRANSACTION の制約事項: SET TRANSACTION ステートメントは、 以下の場合を除き、作業単位の最初の SQL ステートメントである場合にのみ実行することができます。

  • この作業単位で以前に実行されたすべてのステートメントが、 SET TRANSACTION ステートメントまたは分離レベル NC で実行されたステートメントである場合、 または
  • それがトリガーによって実行された場合。

トリガーでは、READ ONLY を指定した SET TRANSACTION はコミット境界でのみ使用できます。 トリガーでは、いつでも SET TRANSACTION ステートメントを実行することができますが、 そのトリガーの最初のステートメントとして実行することをお勧めします。 SET TRANSACTION ステートメントがトリガー内で役立つのは、トリガーの中の SQL ステートメントの分離レベルを、そのトリ ガーを起動させたアプリケーションと同じレベルに設定する場 合です。

現行接続がリモート・アプリケーション・サーバーとの接続である場合、SET TRANSACTION ステートメントは、現行サーバーのトリガーに入っていない限り使用で きません。SET TRANSACTION ステートメントが実行されると、該当の作業単位がコミットまたはロールバックされるまで、 CONNECT および SET CONNECTION ステートメントは使用できません。

2 次スレッド内の最初のステートメントとして SET TRANSACTION を使用することはできません。

SET TRANSACTION ステートメントは、SET TRANSACTION ステートメントの実 行時にまだオープンされている WITH HOLD カーソルに対しては無効です。

代替構文: 以下のキーワードは、旧リリースとの互換性を維持するためにサポートされている同義語です。 これらのキーワードは標準キーワードではないので、原則として使用しないようにしてください。

  • NO COMMIT の同義語として、キーワード NC または NONE を使用できます。
  • READ UNCOMMITTED の同義語として、キーワード UR および CHG を使用できます。
  • READ COMMITTED の同義語として、キーワード CS を使用することができます。
  • REPEATABLE READ の同義語として、キーワード RS または ALL を使用できます。
  • SERIALIZABLE の同義語として、キーワード RR を使用できます。

例 1: 次の SET TRANSACTION ステートメントは、 分離レベルを NONE に設定します (SQL プリコンパイラーのコマンドで *NONE を指定するのと同等です)。

   EXEC SQL SET TRANSACTION ISOLATION LEVEL NO COMMIT;

例 2: 次の SET TRANSACTION は、分離レベルを SERIALIZABLE に設定します。

   SET TRANSACTION ISOLATION LEVEL SERIALIZABLE