• ORACLE 自治事物


    ORACLE 自治事物

    一、问题

         

    (1)现象

     

       一个表A,存在一个触发器,该触发器用来统计表A的数量,并将结果更新到B表。此时,java代码里面调用insert into select 语句,会发生ora-04091错误。

    (2)分析

        Java调用insert into A select from A语句,对于表A来说,同时查询和插入,这个时候,如果A有插入触发器,并统计A表的数量,就存在问题,因为有java事物和触发器事物两个事物存在,就会报错。这时,需要使用到自治事物。

    二、ORACLE自治事物

      除了以上问题,如果遇到这个问题:在执行当前一个由多个DML组成的transaction(事务),为每一步DML记录一些信息到跟踪表中,由于事务的原子性,这些跟踪信息的提交将决定于主事务的commitrollback. 这样一来写程序的难度就增大了程序员不得不把这些跟踪信息记录到类似数组的结构中,然后在主事务结束后把它们存入跟踪表。

      有无方法解决?同样是自治事物。

        AT 是由主事务(以下MT)调用但是独立于它的事务。在AT被调用执行时,MT被挂起,在AT内部,一系列的DML可以被执行并且commitrollback.

      注意由于AT的独立性,它的commitrollback并不影响MT的执行效果。在AT执行结束后,主事务获得控制权,又可以继续执行了。

     

    使用语法:

    Declare

    PRAGMAAUTONOMOUS_TRANSACTION;

    .....

    Commit;

  • 相关阅读:
    linux下vim配置以及一些常用的快捷键
    linux下java环境配置
    编译原理实习(应用预测分析法LL(1)实现语法分析)
    hdu 1063(java写高精度)
    loj 1271
    loj 1379(最短路变形)
    hdu 4114(状压dp)
    loj 1002(spfa变形)
    python生产者消费者模型
    python创建一个线程和一个线程池
  • 原文地址:https://www.cnblogs.com/ironyoda/p/6113272.html
Copyright © 2020-2023  润新知