PRAGMA AUTONOMOUS_TRANSACTION自治事务应用

本文详细介绍了在Oracle数据库中如何使用PRAGMA AUTONOMOUS_TRANSACTION来创建自治事务,这些事务可以在外层事务中独立提交,不受外层事务的影响。适用于匿名块、触发器和存储过程等场景,并提供了具体的实现示例。

PRAGMA AUTONOMOUS_TRANSACTION

在你的一个事务(外层事务)中可以定义一个或几个自治事务。自治事务可以独立commit,不对外层事务产生影响,同样外层事务的 rollback 也对自治事务没有影响。

通常可以考虑将自治事务定义成一个过程,在外层的事务中调用。即当前的存储过程作为已有事务的子事务运行,子事务的commit,rollback操作不影响父事务的状态

应用于

(1)匿名块

(2)触发器

(3)存储过程

 例子:

PROCEDURE addrowautonomous(pid       IN tlog.id%TYPE,
                           pldate    IN tlog.ldate%TYPE,
                           plhsecs   IN tlog.lhsecs%TYPE,
                           pllevel   IN tlog.llevel%TYPE,
                           plsection IN tlog.lsection%TYPE,
                           pluser    IN tlog.luser%TYPE,
                           pltexte   IN tlog.ltexte%TYPE) IS
  PRAGMA AUTONOMOUS_TRANSACTION;
BEGIN
  addrow(pid       => pid,
         pldate    => pldate,
         plhsecs   => plhsecs,
         pllevel   => pllevel,
         plsection => plsection,
         pluser    => pluser,
         pltexte   => pltexte);
  COMMIT;
EXCEPTION
  WHEN OTHERS THEN
    plog.error;
    ROLLBACK;
    RAISE;
END;

自治事务可以用于在客户化程序中记录调试信息

PROCEDURE insert_cux_debug_info(  
    ........  
  ) IS PRAGMA AUTONOMOUS_TRANSACTION;  
    ........  
  BEGIN  
    INSERT INTO cux_debug_info VALUES ........;   
    COMMIT;  
  END;  

 

转载于:https://www.cnblogs.com/Cqiang/archive/2013/04/17/3026583.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值