• 自治事务


    2011年2月21日

    自治事务
    autonomous_transaction
    create table t (msg varchar2(25));
    --自治提交
    create or replace procedure Autonomous_Insert
     as
        pragma autonomous_transaction;
     begin
        insert into t values ('Autonomous Insert');
        commit;
     end;

    --正常的nonautonomous_insert过程
    create or replace procedure NonAutonomous_Insert
     as
     begin
        insert into t values ('NonAutonomous Insert');
        commit;
     end;

    --匿名块中非自治事务的行为
     begin
        insert into t values ('Autonomous Block');
        NonAutonomous_Insert;--调用NonAutonomous_Insert过程
        rollback;
     end;

    select * from t;
    1    Autonomous Block
    2    NonAutonomous Insert
    --匿名块执行的插入由NonAutonomous_Insert过程提交。这两个数据行都已提交,所以rollback命令没有什么可以回滚。把该过程与自治事务过程的行为进行比较

    delete from t;
    commit;

     begin
        insert into t values ('Autonomous Block');
        Autonomous_Insert;--调用Autonomous_Insert过程
        rollback;
     end;

    select * from t;
    1    Autonomous Insert
    /*只有自治事务提交的结果存在t表。匿名块中完成的insert由第四行的回滚语句回滚。自治事务过程的commit对匿名块中开始的父事务没有影响。
    本质上讲,这就抓住了自治事物的精髓。*/
    总结:
       如果在一个“正常”的过程中commit,它不仅会持久保留自己的工作,也会使该会话中为完成的工作成为永久性的。不过,如果在一个自治事务中完成
    commit,只会让这个过程本身的工作成为永久性的。
     
  • 相关阅读:
    NYOJ 542 试制品(第五届河南省省赛)
    714-Card Trick
    716-River Crossing
    1248-海岛争霸
    51Nod
    51Nod
    NYOJ_1274_信道安全
    ZZNU 2095 : 我只看看不写题
    前端-HTML标签
    python 17篇 unittest单元测试框架
  • 原文地址:https://www.cnblogs.com/lanzi/p/1959573.html
Copyright © 2020-2023  润新知