トランザクションのパラメータを設定します。
Synopsis
SET TRANSACTION %COMMITMODE commitmode-value
SET TRANSACTION transaction-mode
SET TRANSACTION 文は、トランザクションを管理するパラメータを設定します。これらのパラメータは、次のトランザクションの開始時に発効し、現在のプロセスの間、またはリセットされるまでの間、有効となります。
START TRANSACTION コマンドを使用して、同じパラメータを設定できます。このコマンドでも、新しいトランザクションが開始されます。既定では、トランザクションは最初のデータベース操作で開始され、
COMMIT または
ROLLBACK で完了するまで継続します。次のデータベース操作で、次のトランザクションが開始されます。
%COMMITMODE キーワードを使用すると、トランザクションのコミットを自動的に実行するかどうかを指定できます。使用可能なオプションは以下のとおりです。
-
-
IMPLICIT : 自動コミットをオンにする。トランザクション処理の実行方法 : それぞれのデータベース処理 (挿入、更新、削除) が個別のトランザクションを構成します。文の実行が成功すると、ロールバックのジャーナルはクリアされ、ロックが解放されます。
COMMIT 文は必要ありません。これが既定の設定です。
-
EXPLICIT : トランザクションの自動コミットをオフにする。トランザクション処理の実行方法 : 複数のデータベース操作で 1 つのトランザクションが構成され、
COMMIT 文でトランザクションが完了します。
以下の関数呼び出しを使用することで、Caché ObjectScript で同じオプションを設定できます。
DO $SYSTEM.SQL.SetAutoCommit(0)
使用可能な関数の値は、0 (NONE)、1 (IMPLICIT)、および 2 (EXPLICIT) です。
ISOLATION MODE を使用すると、コミットされていないデータベースへの変更分に対して、
SELECT クエリで読み取りアクセスできるようにするかどうかを指定できます。READ COMMITTED オプションは、コミットされた変更分のみがクエリ・アクセスで使用できることを示します。要求されたデータは変更されているが、コミット (またはロールバック) されていない場合、クエリはトランザクションが完了するまで待機します。このデータが使用可能になるまで待機している間にロック・タイムアウトが発生した場合、SQLCODE エラーが発行されます。READ COMMITTED が既定です。READ UNCOMMITTED オプションは、すべての変更分がクエリ・アクセスで即座に使用できることを示します。ISOLATION MODE は、
SET TRANSACTION または
START TRANSACTION コマンドを使用して明示的にリセットされるまで有効です。
COMMIT または
ROLLBACK 処理は、ISOLATION MODE の設定には影響しません。
SELECT DISTINCT または
GROUP BY 節を使用したクエリ処理や集約関数の呼び出しは、ISOLATION MODE オプションに影響されません。集約関数は、コミットされていない変更分を含め、現在の変更の状態をすべて返します。
COUNT(*) のような集約関数は大量のレコードに関連し、絶えず変更されている値を返すため、任意の時点の集約値はその時点のトランザクションで発生している正確な変更の状態を反映することができません。