トランザクションの開始を表します。
Synopsis
START TRANSACTION
[%COMMITMODE commitmode]
[transactionmodes]
START TRANSACTION 文を使用して、トランザクションを管理するパラメータを設定することができます。これらのパラメータは、次のトランザクションの開始時に発効し、現在のプロセスの間、またはリセットされるまでの間、有効となります。
SET TRANSACTION コマンドを使用して同じパラメータを設定することができます。どちらのコマンドも使用できます。両方のコマンドはオプションです。
トランザクションの動作が正常完了できなかった場合は、SQLCODE -400 が発行されます。
%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 UNCOMMITTED オプションは、すべての変更分がクエリ・アクセスで即座に使用できることを示します。ISOLATION MODE は、
SET TRANSACTION または
START TRANSACTION コマンドを使用して明示的にリセットされるまで有効です。
COMMIT または
ROLLBACK 処理は、ISOLATION MODE の設定には影響しません。
SELECT DISTINCT または
GROUP BY 節を使用したクエリ処理や集約関数の呼び出しは、ISOLATION MODE オプションに影響されません。集約関数は、コミットされていない変更分を含め、現在の変更の状態をすべて返します。
COUNT(*) のような集約関数は大量のレコードに関連し、絶えず変更されている値を返すため、任意の時点の集約値はその時点のトランザクションで発生している正確な変更の状態を反映することができません。
Caché ObjectScript と SQL トランザクション
TSTART と
TCOMMIT を使用した Caché ObjectScript トランザクション処理は、SQL 文
START TRANSACTION と
COMMIT を使用した SQL トランザクション処理とは異なり、互換性はありません。Caché ObjectScript トランザクション処理は、入れ子になったトランザクションを限定的にサポートします。SQL トランザクション処理では、入れ子になったトランザクションのロールバック用のユーザ定義セーブポイントがサポートされます。Caché ObjectScript トランザクション処理は、SQL ロック制御変数 (特に SQL ロック・エスカレーション変数) と相互にやり取りしません。アプリケーションは、これら 2 種類のトランザクション処理を混同しないよう注意する必要があります。
トランザクションに SQL 更新文が含まれる場合、SQL の
START TRANSACTION 文でトランザクションが開始され、
COMMIT 文でコミットします。トランザクションを開始するものでない限り、
TSTART/
TCOMMIT を入れ子にして使用するメソッドをトランザクションに組み込むことができます。メソッドとストアド・プロシージャは、通常、設計でトランザクションの主要なコントローラにならない限り、SQL トランザクション制御文を使用しません。ストアド・プロシージャは、独自のトランザクション制御モデルの ODBC/JDBC から呼び出されるため、通常 SQL トランザクション制御文を使用しません。