oracle自治事务

首先,有2个问题。

1.怎么解决把日志写入表的问题

不要以为直接insert一下就好了,因为假设事务失败了,日志表的DML操作也会回滚,这样,在排错时,日志就没有卵用了。

之前做过一个项目,可以把写日志的处理单独开一个session,这样就可以隔离业务处理和日志处理了。这个算是一个解决方案,缺点就是占用数据库连接。

2.触发器中怎么写入commit,rollback

这个问题貌似就麻烦了,因为触发器中不能写这种语句。

另一种解决方案就是自治事务。

自治事务就是独立于主事务,自己控制的分支事务,实现方式超级简单,在PL/SQL代码中加入PRAGMA AUTONOMOUS_TRANSACTION就可以了,不多说,上案例。

1.存储过程加自治事务

CREATE OR REPLACE PROCEDURE WRITE_LOG(LOGCONTENT VARCHAR)
IS
PRAGMA AUTONOMOUS_TRANSACTION;
BEGIN
  INSERT INTO TAB_LOG (COMN) VALUES (LOGCONTENT);
  COMMIT;
END;

BEGIN
  UPDATE EMP SET DEPTNO=99 WHERE EMPNO=7788;
  COMMIT;
  WRITE_LOG('EMP UPDATE SUCCESS.');
EXCEPTION
  WHEN OTHERS THEN
    ROLLBACK;
  WRITE_LOG('EMP UPDATE FAIL!!!!');
END;
/

2.触发器加自治事务

CREATE OR REPLACE TRIGGER INSERT_LOG
AFTER INSERT OR UPDATE OR DELETE ON EMP1
DECLARE
  PRAGMA AUTONOMOUS_TRANSACTION;
BEGIN
  INSERT INTO TAB_LOG (COMN) VALUES ('EMP1 CHANGED!!!!');
  COMMIT;
END;
/

 

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值