Menu

文档

存储过程支持自治事务

存储过程支持自治事务,标识符为PRAGMA AUTONOMOUS_TRANSACTION,执行的函数块中使用start transaction和commit/rollback包含执行的sql,其余语法与CREATE PROCEDURE创建存储过程类似,一个简单例子如下:

--创建表。
CREATE TABLE test1 (a int, b text);
--创建包含自治事务的存储过程。
CREATE OR REPLACE PROCEDURE autonomous_easy_1(i int)
AS
DECLARE
    PRAGMA AUTONOMOUS_TRANSACTION;
BEGIN
    START TRANSACTION;
    INSERT INTO test1 VALUES (2, 'a');
    IF i % 2 = 0 THEN
        COMMIT;
    ELSE
        ROLLBACK;
    END IF;
END;
/
--执行存储过程。
select autonomous_easy_1(1);
--查看表数据。
select * from test1;
--结果如下。
 a | b
---+---
(0 rows)

--执行存储过程。
select autonomous_easy_1(2);
--查看表数据。
select * from test1;
--结果如下。
 a | b
---+---
 2 | a
(1 row)

--清空表数据。
truncate table test1;
--在回滚的事务块中执行包含自治事务的存储过程。
begin;
insert into test1 values(1,'b');
select autonomous_easy_2(2);
rollback;

--查看表数据。
select * from test1;
--结果如下。
 a | b
---+---
 2 | a
(1 row)

上述例子,最后在回滚的事务块中执行包含自治事务的存储过程,也能直接说明了自治事务的特性,即主事务的回滚,不会影响自治事务已经提交的内容。

本文档遵循知识共享许可协议CC 4.0 (http://creativecommons.org/Licenses/by/4.0/)。