• Oracle


    自治事务 - autonomous transaction

    在Oracle数据库中,有时候我们会希望记录一个过程或者函数的运行日志,不管正常运行结束还是触发异常结束,都要记录。

    正常结束的没有问题,但是触发异常的情况下,一般的过程或者函数显然不能在插入运行日志之后直接Commit,因为触发异常后相关业务逻辑需要RollBack。

    而自治事务就能够很好的避免了这样的问题,就是说自治事务是在某个会话中独立开启一个事务,在其中处理的操作不会影响到同一会话中其他事务未提交的内容。

    下面开始举个例子说明一下:

     1 --Run_Logs; //运行日志表,包含栏位dates, logs
     2 
     3 --自治事务存储过程
     4 CREATE OR REPLACE PROCEDURE Pro_Run_Logs(Error_Info In Varchar2)
     5  Is PRAGMA AUTONOMOUS_TRANSACTION;
     6 BEGIN
     7  Insert Into Run_Logs(Dates, Logs) Values (Sysdate, Error_Info);
     8  COMMIT;
     9 END;
    10 
    11 --一般业务逻辑存储过程
    12 CREATE OR REPLACE PROCEDURE Pro_Test(v_oldcustname in varchar2,v_newcustname in varchar2) is
    13 i number;
    14 errorException exception; --申明异常 
    15 str_err varchar2(100);
    16 user_err exception;
    17 begin
    18 --业务逻辑
    19 
    20 Commit;
    21 exception
    22     When errorException Then
    23          Pro_Run_Logs(str_err);
    24     WHEN user_err THEN
    25         raise_application_error(-20007, str_err);
    26         RAISE;
    27 end;

      作者:Jeremy.Wu
      出处:https://www.cnblogs.com/jeremywucnblog/
      本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

  • 相关阅读:
    SDOI 2016 数字配对
    SDOI 2016 征途 决策单调性
    SDOI 2016 生成魔咒
    SDOI 2016 排列计数
    【SC主题公园杯】三个袋子 = =不动脑的后果
    【BZOJ3050】【USACO 2013 Jan Gold金组】坐座位 Seating
    MillerRabin 快速的素数概率判定法
    [POJ3189][cqbzoj1640]稳定的奶牛分配 解题报告
    最大流 isap 模板
    【POJ 1324】Holedox Moving A*宽搜
  • 原文地址:https://www.cnblogs.com/jeremywucnblog/p/11434415.html
Copyright © 2020-2023  润新知