PRAGMA AUTONOMOUS_TRANSACTION自治事务应用
PRAGMA AUTONOMOUS_TRANSACTION自治事务应用
在你的一个事务(外层事务)中可以定义一个或几个自治事务。自治事务可以独立commit,不对外层事务产生影响,同样外层事务的 rollback 也对自治事务没有影响。
通常可以考虑将自治事务定义成一个过程,在外层的事务中调用。即当前的存储过程作为已有事务的子事务运行,子事务的commit,rollback操作不影响父事务的状态
应用于
(1)匿名块
(2)触发器
(3)存储过程
例子:
PROCEDURE addrowautonomous(pid IN tlog.id%TYPE,
pldate IN tlog.ldate%TYPE,
plhsecs IN tlog.lhsecs%TYPE,
pllevel IN tlog.llevel%TYPE,
plsection IN tlog.lsection%TYPE,
pluser IN tlog.luser%TYPE,
pltexte IN tlog.ltexte%TYPE) IS
PRAGMA AUTONOMOUS_TRANSACTION;
BEGIN
addrow(pid => pid,
pldate => pldate,
plhsecs => plhsecs,
pllevel => pllevel,
plsection => plsection,
pluser => pluser,
pltexte => pltexte);
COMMIT;
EXCEPTION
WHEN OTHERS THEN
plog.error;
ROLLBACK;
RAISE;
END;
自治事务可以用于在客户化程序中记录调试信息
PROCEDURE insert_cux_debug_info(
........
) IS PRAGMA AUTONOMOUS_TRANSACTION;
........
BEGIN
INSERT INTO cux_debug_info VALUES ........;
COMMIT;
END;