建立错误信息表:
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的话:
自治事务的唯一用途就是记录出错日志。其他用法可以说都是错的。