Oracle自治事务读书笔记

本文介绍了Oracle自治事务的概念及其使用方式。自治事务允许将一个主事务分割成多个子事务,每个子事务独立于主事务,其Rollback和Commit操作仅影响自身。文章详细解释了如何通过PL/SQL程序块定义自治事务,并提供了示例代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

                                 

 

         Oracle自治事务(Autonomous Transaction)将一个主事务分割成几个子事务,在执行完子事务以后再继续主事务。这里的关键是,子事务是独立于主事务的,子事务中的Rollback和Commit操作只会影响子事务中的DML操作;同样,主事务中的Rollback和Commit操作只会影响事务中的DML操作,而不会影响子事务中的操作。在子事务中已经commit的操作,不会被主事务中的rollback撤销。

          制定PL/SQL程序块为自治事务可以通过在程序开头使用如下命令实现

          PRAGMA AUTONOMOUS_TRANSACTION
 

          定义自治事务必须遵循以下规则:         

  • 如果要被定义为自治事务的程序是匿名的,则它必须是一个最外层的程序块。

  • 如果不是匿名的,则它必须是函数或者过程,或者是包含在一个中。在一个包中,只有其中的函数或过程能够定义成自治事务。整个包不能申明为自治事务。

  • 一个对象的方法可以申明为自治事务

  • 触发器可以申明为自治事务

  • 内嵌程序块不能申明为自治事务

注意:对于一个匿名的自治事务程序块来说,只有这个块的begin和end之间的代码被看作是自治事务。考虑下面的例子

  1  DECLARE
  2    PRAGMA AUTONOMOUS_TRANSACTION;
  3    FUNCTION dummy_log_error RETURN NUMBER;
  4    v_num NUMBER(1) := 0;
  5    retcd NUMBER := dummy_log_error;
  6    FUNCTION dummy_log_error RETURN NUMBER
  7        IS
  8    BEGIN
  9      INSERT INTO error_log VALUES ( -99,-99,'Dummy Error!',USER, SYSDATE);
 10      RETURN (-99);
 11   END;
 12  BEGIN
 13      INSERT INTO error_log VALUES (v_num, v_num, 'No Error!',USER, SYSDATE);
 14      COMMIT;
 15  END;

Oracle认为自治事务从12行开始,到15行结束。在执行上述代码之后,可以看到error_log表中存在上面代码插入的两条记录,但执行rollback之后,只剩下13行插入的记录,而函数dummy_log_error()插入的记录被回退掉了。这就证明了前面所说的关于自治事务范围的表述。

  http://stanli.bokee.com/6132745.html
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值