COMMIT¶
</ div>
COMMITコマンドは、現在のトランザクション中に行われたすべてのデータベース更新を永続化し、現在のトランザクションを終了します。
COMMIT [ WORK ];
COMMITコマンドは、匿名ブロック、ストアドプロシージャ、または関数内で使用できます。
SPLプログラム内では、実行可能セクションや例外セクションに表示される場合があります。
次の例では、匿名ブロックの3番目のINSERTコマンドはエラーになります。最初の2つのINSERTコマンドの効果は、最初のSELECTコマンドが示すように保持されます。
ROLLBACKコマンドを発行した後でも、2番目のSELECTコマンドで示されているように、2つの行はテーブルに残り、実際にコミットされたことを確認します。
!!! Note *
以下の例に示すedb_stmt_level_tx設定パラメータは、ALTER DATABASEコマンドを使用してデータベース全体に設定するか、postgresql.confファイルで変更してデータベースサーバ全体に設定できます。
\set AUTOCOMMIT off
SET edb_stmt_level_tx TO on;
BEGIN
* INSERT INTO dept VALUES (50, 'FINANCE', 'DALLAS');
* INSERT INTO dept VALUES (60, 'MARKETING', 'CHICAGO');
* COMMIT;
* INSERT INTO dept VALUES (70, 'HUMAN RESOURCES', 'CHICAGO');
EXCEPTION
* WHEN OTHERS THEN
* DBMS_OUTPUT.PUT_LINE('SQLERRM: ' || SQLERRM);
* DBMS_OUTPUT.PUT_LINE('SQLCODE: ' || SQLCODE);
END;
SQLERRM: value too long for type character varying(14)
SQLCODE: 22001
SELECT * FROM dept;
deptno | dname | loc
--------+------------+----------
* 10 | ACCOUNTING | NEW YORK
* 20 | RESEARCH | DALLAS
* 30 | SALES | CHICAGO
* 40 | OPERATIONS | BOSTON
* 50 | FINANCE | DALLAS
* 60 | MARKETING | CHICAGO
(6 rows)
ROLLBACK;
SELECT * FROM dept;
deptno | dname | loc
--------+------------+----------
* 10 | ACCOUNTING | NEW YORK
* 20 | RESEARCH | DALLAS
* 30 | SALES | CHICAGO
* 40 | OPERATIONS | BOSTON
* 50 | FINANCE | DALLAS
* 60 | MARKETING | CHICAGO
(6 rows)