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;  

 

你可能感兴趣的:(transaction)