日期:2014-05-16  浏览次数:20591 次

Oracle自治事务的介绍(Autonomous Transactions)[转]
转自:http://blog.csdn.net/java2000_net/article/details/3710233

Autonomous transactions allow you to leave the context of the calling transaction, perform an independant transaction, and return to the calling transaction without affecting it's state. The autonomous transaction has no link to the calling transaction, so only commited data can be shared by both transactions.
自治事务允许你离开调用的事务上下文,执行一个独立的事务,然后返回调用的事务而不会影响到调用事务的状态。自治事务和调用事务不同,只有提交的事务才会在事务见共享。


The following types of PL/SQL blocks can be defined as autonomous transactions:
以下的PL/SQL代码块可以定义为自治事务。

    * Stored procedures and functions. 存储过程和函数
    * Local procedures and functions defined in a PL/SQL declaration block. 定义在声明块里的本地存储过程和函数
    * Packaged procedures and functions. 打包的存储过程和函数
    * Type methods. 类型方法
    * Top-level anonymous blocks. 顶层的匿名块

The easiest way to understand autonomous transactions is to see them in action. To do this, we create a test table and populate it with two rows. Notice that the data is not commited.
最简单的理解自治事务的方法是查看他们的行为。我们创建一个测试表格,然后放入2行数据,注意数据没有提交。


    CREATE TABLE at_test (
      id NUMBER NOT NULL,
      description VARCHAR2(50) NOT NULL
    );

    INSERT INTO at_test (id, description) VALUES (1, 'Description for 1');
    INSERT INTO at_test (id, description) VALUES (2, 'Description for 2');

    SELECT * FROM at_test;

            ID DESCRIPTION
    ---------- --------------------------------------------------
             1 Description for 1
             2 Description for 2

    2 rows selected.

    SQL>

Next, we insert another 8 rows using an anonymous block declared as an autonomous transaction, which contains a commit statement.
下一步,我们使用匿名的自治事务块插入另外8行数据,同时提交。

    DECLARE
      PRAGMA AUTONOMOUS_TRANSACTION;
    BEGIN
      FOR i IN 3 .. 10 LOOP
        INSERT INTO at_test (id, description)
        VALUES (i, 'Description for ' || i);
      END LOOP;
      COMMIT;
    END;
    /

    PL/SQL procedure successfully completed.

    SELECT * FROM at_test;

            ID DESCRIPTION
    ---------- --------------------------------------------------
             1 Description for 1
             2 Description for 2
             3 Description for 3
             4 Description for 4
             5 Description for 5
             6 Description for 6
             7 Description for 7
             8 Description for