ORACLE PL/SQL 利用自治事务实现日志记录

程序中通常都要实现日志记录功能,尤其是事务发生报错时的错误日志。如果把日志记录在数据库中,可以方便后续的查询和分析。但是如果直接把记录日志的共能写在事务中,如果事务发生ROLLBACK,记录的日志也会发生ROLLBACK,明显时不合适的。但是使用自治事务可以很方便的实现日志记录功能,并且不会受主事务的影响。下面实现一个简单的日志记录例子。

1. 创建日志记录表

点击(此处)折叠或打开

  1. create table logtab (
  2.   code integer,
  3.   text varchar2(4000),
  4.   created_on date,
  5.   created_by varchar2(50),
  6.   changed_on date,
  7.   changed_by varchar2(50)
  8.   );
2. 创建记录日志的package

创建日志包可以方便统一管理日志记录,并且可以实现自治事务。
log package 包含两个procedure:putline和saveline,putline实现日志插入,saveline时一个自治事务,调用putline。在程序中记录日志时可以直接调用saveline实现。

点击(此处)折叠或打开

  1. create or replace package log
  2. is
  3.   procedure putline(code_in in integer, text_in in varchar2);
  4.   procedure saveline(code_in in integer, text_in in varchar2);
  5. end log;
  6. /

  7. create or replace package body log
  8. is
  9.   procedure putline(
  10.     code_in in integer,text_in in varchar2)
  11.   is
  12.   begin
  13.     insert into logtab
  14.     values(code_in,text_in,sysdate,user,sysdate,user);
  15.   end;

  16.   procedure saveline(
  17.     code_in in integer,text_in in varchar2)
  18.   is
  19.     pragma autonomous_transaction;
  20.   begin
  21.     putline(code_in, text_in);
  22.     commit;
  23.     exception when others then rollback;
  24.   end;
  25. end log;
  26. /
3. 一个简单的例子

选择一个不存在的数据,查看logtab里的记录

点击(此处)折叠或打开

  1. declare
  2. sal pls_integer;
  3. begin
  4. select salary into sal from employees where employee_id = 11111;
  5. exception
  6.   when others
  7.     then sys.log.saveline(sqlcode,sqlerrm);
  8. end;
  9. /
查看logtab里的记录

点击(此处)折叠或打开

  1. select * from logtab;

  1.       CODE TEXT                           CREATED_O CREATE_BY CHANGE_ON CHANGE_BY
  2. ---------- ------------------------------ --------- ---------- --------- ----------
  3.        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/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值