COMMIT 命令使当前事务期间执行的所有数据库更新永久化,并结束当前事务。
COMMIT [ WORK ];
COMMIT 命令可在匿名块、存储过程或函数中使用。在 SPL 程序内,它可出现在可执行部分和/或异常部分中。
在以下示例中,匿名块中的第三个 INSERT 命令导致错误。前两个 INSERT 命令的效果将保留,如第一个 SELECT 命令的输出所示。即使在发出 ROLLBACK 命令后,这两行仍保留在表中,这验证了它们确实已提交,如第二个 SELECT 命令的输出所示。
说明 可通过使用 ALTERDATABASE 命令为整个数据库设置 polar_comp_stmt_level_tx 配置参数(如以下示例所示),也可通过在 Postgresql.conf
文件中对其进行更改,为整个数据库服务器设置该参数。
\set AUTOCOMMIT off
SET polar_comp_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)