在你的一个事务(外层事务)中可以定义一个或几个自治事务。自治事务可以独立commit,不对外层事务产生影响,同样外层事务的 rollback 也对自治事务没有影响。通常可以考虑将自治事务定义成一个过程,在外层的事务中调用。
现在举个例子吧:以下procedure被一个无名块调用,
PROCEDURE write_log (
code IN INTEGER, text IN VARCHAR2)
IS
PRAGMA AUTONOMOUS_TRANSACTION;
BEGIN
INSERT INTO log VALUES (
code, text,
USER, SYSDATE
);
COMMIT;
END;
因为这个procedure的作用是写log,无论操作成功与否(即无名块是否执行rollback),log当然是都应该记录的啦。所以要把它写成自治事务,让这个procedure的提交独立于调用它的无名块,在rollback时也不会影响到log的记录。
Oracle自治事务的介绍(Autonomous Transactions)
最新推荐文章于 2021-04-05 23:42:05 发布