トランザクションの開始を表します。
Synopsis
START TRANSACTION 
     [%COMMITMODE commitmode]
     [transactionmodes]
引数
commitmode オプション — トランザクションがデータベースにコミットされる方法を指定します。有効な値は、EXPLICIT、IMPLICIT、および NONE です。既定は NONE です。
transactionmodes オプション — トランザクションのアクセス・モードと分離モードを指定します。分離モード、アクセス・モード、またはコンマ区切りリストとして両方のモードの値を指定できます。分離モードの有効な値は、ISOLATION LEVEL READ COMMITTED と ISOLATION LEVEL READ UNCOMMITTED です。アクセス・モードに有効な値は READ ONLY と READ WRITE です。ISOLATION LEVEL READ UNCOMMITTED は、アクセス・モードの READ WRITE と互換性がないことに注意してください。
概要
START TRANSACTION 文は、トランザクションの開始を表します。通常、SQL トランザクションは、START TRANSACTION という文で始まります。しかし、これはオプションです。COMMIT に続く最初のデータベース処理は、トランザクションが明示的に開始されていない場合に、暗黙的にトランザクションを開始します。トランザクションがすでに進行中の場合、START TRANSACTION を発行しても処理を実行せず、エラー・コードも返しません。
START TRANSACTION 文を使用して、トランザクションを管理するパラメータを設定することができます。これらのパラメータは、次のトランザクションの開始時に発効し、現在のプロセスの間、またはリセットされるまでの間、有効となります。SET TRANSACTION コマンドを使用して同じパラメータを設定することができます。どちらのコマンドも使用できます。両方のコマンドはオプションです。
トランザクションの動作が正常完了できなかった場合は、SQLCODE -400 が発行されます。
%COMMITMODE
%COMMITMODE キーワードを使用すると、トランザクションのコミットを自動的に実行するかどうかを指定できます。使用可能なオプションは以下のとおりです。
以下の関数呼び出しを使用することで、Caché ObjectScript で同じオプションを設定できます。
  DO $SYSTEM.SQL.SetAutoCommit(0)
使用可能な関数の値は、0 (NONE)、1 (IMPLICIT)、および 2 (EXPLICIT) です。
ISOLATION MODE
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 トランザクション
TSTARTTCOMMIT を使用した Caché ObjectScript トランザクション処理は、SQL 文 START TRANSACTIONCOMMIT を使用した SQL トランザクション処理とは異なり、互換性はありません。Caché ObjectScript トランザクション処理は、入れ子になったトランザクションを限定的にサポートします。SQL トランザクション処理では、入れ子になったトランザクションのロールバック用のユーザ定義セーブポイントがサポートされます。Caché ObjectScript トランザクション処理は、SQL ロック制御変数 (特に SQL ロック・エスカレーション変数) と相互にやり取りしません。アプリケーションは、これら 2 種類のトランザクション処理を混同しないよう注意する必要があります。
トランザクションに SQL 更新文が含まれる場合、SQL の START TRANSACTION 文でトランザクションが開始され、COMMIT 文でコミットします。トランザクションを開始するものでない限り、TSTART/TCOMMIT を入れ子にして使用するメソッドをトランザクションに組み込むことができます。メソッドとストアド・プロシージャは、通常、設計でトランザクションの主要なコントローラにならない限り、SQL トランザクション制御文を使用しません。ストアド・プロシージャは、独自のトランザクション制御モデルの ODBC/JDBC から呼び出されるため、通常 SQL トランザクション制御文を使用しません。
関連項目
トランザクション COMMIT ROLLBACK SAVEPOINT SET TRANSACTION