データベースへの変更を確定するには、COMMIT
文を使用します。変更がコミットされるまで、他のユーザーは変更されたデータにアクセスできず、表示されるのはトランザクション開始前の状態のデータです。COMMIT
文は、ホスト変数の値にも、プログラムの制御フローにも影響はありません。具体的には、COMMIT
文により次の処理が実行されます。
これらの変更を他のユーザーが参照できるようにします。
すべてのセーブポイントを消去します(ROLLBACK文の使用についてを参照)。
解析ロック以外の行および表のロックをすべて解除します。
CURRENT OF句で参照されるカーソルをクローズします。MODE={ANSI13|ORACLE}
の場合は、すべての明示カーソルをクローズします。
トランザクションを終了します。
MODE={ANSI13|ORACLE}
の場合、CURRENT OF
句で参照されていない明示カーソルは、複数のコミットにわたりオープン状態のままです。これによってパフォーマンスが向上します。たとえば、複数のコミットにわたるフェッチについてを参照してください。
これらは通常の処理の一部であるため、COMMIT
文は、プログラムのメイン・パスにインラインで設定する必要があります。プログラムを終了する前に、保留中の変更を明示的にコミットしてください。コミットしない場合、保留中の変更はロールバックされます。次の例では、トランザクションをコミットして、Oracleとの接続を切断します。
EXEC SQL COMMIT WORK RELEASE;
オプションのキーワードWORKには、ANSI互換性があります。RELEASEオプションを指定すると、プログラムで使用されているOracleリソース(ロックとカーソル)がすべて解放され、データベースとの接続が切断されます。
データ定義文では、実行の前後に自動コミットが発行されるため、データ定義文の後にCOMMIT文を記述する必要はありません。したがってデータ定義文が正常終了しても異常終了しても、その前のトランザクションがコミットされます。