自治事务可以提交或者回滚其修改而不影响调用它的事务,一般用在错误日志上。
创建日志表:
CREATE TABLE TB_LOG
(
LOG_TIME TIMESTAMP NOT NULL
);
创建主事务需要的表:
CREATE TABLE TB_MAIN (ID INTEGER PRIMARY KEY);
创建自治事务的存储过程:
CREATE OR REPLACE PROCEDURE AUTONOMOUS_INSERT AS
PRAGMA AUTONOMOUS_TRANSACTION;
LOG_TIME TIMESTAMP;
BEGIN
SELECT SYSDATE INTO LOG_TIME FROM DUAL;
INSERT INTO TB_LOG VALUES (LOG_TIME);
COMMIT;
END;
用PRAGMA AUTONOMOUS_TRANSACTION来表明这个是自治事务。
主事务:
BEGIN
INSERT INTO TB_MAIN VALUES (1);
AUTONOMOUS_INSERT;
ROLLBACK;
END;
执行主事务后SELECT,发现TB_MAIN里面没有数据,而TB_LOG里有数据。