自治事务可以提交或者回滚其修改而不影响调用它的事务,一般用在错误日志上。


创建日志表:

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里有数据。