程序中通常都要实现日志记录功能,尤其是事务发生报错时的错误日志。如果把日志记录在数据库中,可以方便后续的查询和分析。但是如果直接把记录日志的共能写在事务中,如果事务发生ROLLBACK,记录的日志也会发生ROLLBACK,明显时不合适的。但是使用自治事务可以很方便的实现日志记录功能,并且不会受主事务的影响。下面实现一个简单的日志记录例子。
1. 创建日志记录表
2. 创建记录日志的package
创建日志包可以方便统一管理日志记录,并且可以实现自治事务。
log package 包含两个procedure:putline和saveline,putline实现日志插入,saveline时一个自治事务,调用putline。在程序中记录日志时可以直接调用saveline实现。
3. 一个简单的例子
选择一个不存在的数据,查看logtab里的记录
查看logtab里的记录
1. 创建日志记录表
点击(此处)折叠或打开
- create table logtab (
- code integer,
- text varchar2(4000),
- created_on date,
- created_by varchar2(50),
- changed_on date,
- changed_by varchar2(50)
- );
创建日志包可以方便统一管理日志记录,并且可以实现自治事务。
log package 包含两个procedure:putline和saveline,putline实现日志插入,saveline时一个自治事务,调用putline。在程序中记录日志时可以直接调用saveline实现。
点击(此处)折叠或打开
- create or replace package log
- is
- procedure putline(code_in in integer, text_in in varchar2);
- procedure saveline(code_in in integer, text_in in varchar2);
- end log;
- /
-
- create or replace package body log
- is
- procedure putline(
- code_in in integer,text_in in varchar2)
- is
- begin
- insert into logtab
- values(code_in,text_in,sysdate,user,sysdate,user);
- end;
-
- procedure saveline(
- code_in in integer,text_in in varchar2)
- is
- pragma autonomous_transaction;
- begin
- putline(code_in, text_in);
- commit;
- exception when others then rollback;
- end;
- end log;
- /
选择一个不存在的数据,查看logtab里的记录
点击(此处)折叠或打开
- declare
- sal pls_integer;
- begin
- select salary into sal from employees where employee_id = 11111;
- exception
- when others
- then sys.log.saveline(sqlcode,sqlerrm);
- end;
- /
点击(此处)折叠或打开
- select * from logtab;
- CODE TEXT CREATED_O CREATE_BY CHANGE_ON CHANGE_BY
- ---------- ------------------------------ --------- ---------- --------- ----------
- 100 ORA-01403: no data found 10-JUN-18 SYS 10-JUN-18 SYS
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/31535516/viewspace-2155907/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/31535516/viewspace-2155907/