16.20 - COMMIT - Teradata Database - Teradata Vantage NewSQL Engine

Teradata Vantage™ SQLデータ操作言語

Product
Teradata Database
Teradata Vantage NewSQL Engine
Release Number
16.20
Release Date
2019年3月
Content Type
プログラミング リファレンス
Publication ID
B035-1146-162K-JPN
Language
日本語 (日本)

目的

現在のANSIセッション モードのSQLトランザクションを終了し、そのトランザクションで加えられた変更をすべてコミットし、そのトランザクションの一時ジャーナルを削除します。

以下も参照してください。
  • ABORT
  • ROLLBACK
  • Teradata Vantage™ SQLリクエストおよびトランザクション処理、B035-1142

必要な権限

なし。

構文



構文要素

WORK
SQLフラッガーが有効になっている場合、WORKを省略すると、リクエストにフラグが付けられます。
SQLフラッガーの詳細は、<Teradata Vantage™ SQL基礎、B035-1141>を参照してください。
RELEASE
クライアント アプリケーション プログラムとTeradata Databaseをつなぐ接続(暗黙接続または明示接続のどちらでも)が終了します。
このオプションは、埋め込みSQLにのみ適用されるもので、ANSIに準拠していません。

ANSI準拠

COMMITは、ANSI SQL:2011に準拠しており、さらに拡張されています。

COMMITは、ANSIセッション モードでのみ有効です。Teradataセッション モードで使用した場合には、失敗が戻され、トランザクションがアボートされます。

その他のSQL言語は、次のような名前の類似した非ANSI規格文をサポートしています。
  • COMMIT TRANSACTION
  • COMMIT WORK

ANSIトランザクションの定義および終了方法

ANSIセッション モードでは、セッションの最初のSQLリクエストがトランザクションを開始します。そのトランザクションは、COMMIT、ROLLBACK、またはABORTリクエストのどれかを発行すると終了します。リクエストが失敗しても、トランザクションはロールバックされない。ロールバックが発生するのはリクエストの場合のみです。

COMMITは明示的

ANSIセッション モードには、暗黙的なトランザクションはありません。より正確に言うと、各ANSIトランザクションは暗黙的に開始されますが、常に明示的に完了します。COMMITは、必ず明示的に指定しなければならず、トランザクションを正常に終了させるためには、トランザクションの最後のリクエストでなければなりません。

ANSIセッション モードでは、トランザクション内のリクエストがSELECTまたはSELECT AND CONSUMEのみの場合でも、COMMIT (またはABORT/ROLLBACK) 文のどれかを発行する必要があります。

SELECTリクエストの場合、COMMITまたはABORT/ROLLBACKのいずれを発行しても違いはありません。

SELECT AND CONSUMEの場合、COMMITを発行するのと、ABORT/ROLLBACKを発行するのとでは出力に相違がです。これは、ABORTまたはROLLBACKリクエストはリクエストのサブジェクト キュー テーブルを以前のステータスに回復し、これにはアボートされたSELECT AND CONSUMEリクエストで擬似的に消費された行も含まれるからです。

埋め込みSQLのルール

埋め込みSQLアプリケーション内でCOMMIT文を使用する場合は、以下のルールが当てはまります。
  • COMMITを動的SQL文として実行することはできません。
  • COMMITは、現在のトランザクション内で準備されている動的SQL文を破棄します。
  • COMMITは、開いているカーソルを閉じます。
  • COMMITは、プリプロセッサに対してTRANSACT(COMMIT)、-tr(COMMIT)、TRANSACT(ANSI)、-tr(ANSI)のいずれかのオプションを指定した場合にのみ有効です。

    プログラムがTRANSACT(BTET)、-tr(BTET)、TRANSACT(2PC)プリプロセッサ オプションでプリコンパイルされている場合に、COMMITを使用するとエラーが発生します。

  • RELEASEオプションを指定した場合は、Teradata Databaseとのアプリケーション プログラム接続は(明示接続または暗黙接続のどちらでも)終了します。

    その後、追加のSQLリクエスト(CONNECTまたはLOGON以外)を実行する場合は、暗黙接続が試みられます。

  • プリプロセッサに対してTRANSACT(ANSI)または-tr(ANSI)オプションを指定した場合は、RELEASEが無効になります。

ABORTおよびROLLBACKとの関係

ABORT文とROLLBACK文も現在のトランザクションを終了しますが、コミットの代わりにロールバックが発生します。ABORTROLLBACKを参照してください。

COMMITおよびBTEQ

BTEQスクリプトで、COMMITを.SESSIONまたは.REPEATコマンドとともに使用する場合には、COMMITリクエストと、繰り返されるSQLリクエストを1つのリクエストとして送信しなければなりません。

繰り返されるリクエストをCOMMITなしで送信すると、リクエストのうちの1つが他のセッションによってブロックされ、そのジョブはデッドロックのためにハングします。

次のダミーの例に、どのようにしてそれが起こるかを示します。

     .SESSION TRANS ANSI
     .SESSIONS 10
     .LOGON TDPID/USER,PASSWD

     .IMPORT DATA FILE = data_file_name
     .REPEAT I

     USING i(INTEGER), j(INTEGER)
     INSERT INTO table_name (col1, col2)
     VALUES (:1, :j); COMMIT;

     .QUIT

例: INSERTリクエスト

次の例のINSERTリクエストは、トランザクションをオープンします。COMMITは、そのトランザクションをクローズします。

     INSERT INTO employee (name, empno)
     VALUES ('Sinclair P', 101)
     WHERE dept = '400';
     COMMIT;

例: UPDATEの後のCOMMIT

次のUPDATEは、トランザクションを開始し、COMMIT WORKはそのトランザクションを終了させます。

     UPDATE parts SET part_num = 20555
     WHERE location = 'seoul';
     COMMIT WORK;