使用自制事务进行异常信息的记录:Autonomous transactions-log

建立错误信息表:

1     CREATE TABLE error_logs ( 
2 id NUMBER(10) NOT NULL,
3 log_timestamp TIMESTAMP NOT NULL,
4 error_message VARCHAR2(4000),
5 CONSTRAINT error_logs_pk PRIMARY KEY (id)
6 );

--过程的建立(使用自制事务)

 1 CREATE OR REPLACE PROCEDURE LOG_ERRORS(P_ERROR_MESSAGE IN VARCHAR2) AS
2 PRAGMA AUTONOMOUS_TRANSACTION;
3 BEGIN
4 INSERT INTO ERROR_LOGS
5 (ID, LOG_TIMESTAMP, ERROR_MESSAGE)
6 VALUES
7 --SYS_GUID()表示获得32位的序列号
8 (SYS_GUID(), SYSTIMESTAMP, P_ERROR_MESSAGE);
9 COMMIT;
10 END;

手动的抛出异常信息,并会滚,但是错误正常记录:

--错误信息表

--------测试:

 1 DECLARE
2 V_EXP EXCEPTION;
3 BEGIN
4 INSERT INTO USER_INFO (USER_NAME, ID) VALUES ('小光', 5);
5 RAISE V_EXP;
6 EXCEPTION
7 WHEN OTHERS THEN
8 LOG_ERRORS(P_ERROR_MESSAGE => SQLERRM);
9 ROLLBACK;
10 END;

结果:没有新增数据

 

异常日志信息表:


自治事务的唯一用法就是日志的记录:

http://www.itpub.net/thread-1892664-1-1.html

牢牢记住TOM的话:
自治事务的唯一用途就是记录出错日志。其他用法可以说都是错的。

posted on 2012-01-14 22:17  Coldest Winter  阅读(242)  评论(0编辑  收藏  举报