控制自治事务
自治程序中的第1条SQL语句开始了一个事务。当一个事务结束之后,下一个SQL语句开始了另一个事务。上一次提交或回滚之后所有SQL语句构成了当前的事务,控制自治事务需要使用下面的语句:
COMMIT; ROLLBACK [TO savepoint_name] SAVEPOINT savepoint_name SET TRANSACTION |
(1)进入和离开
当进入自治程序的可执行部分时,主事务挂起;当退出程序时,主事务恢复。
如果试图不提交或回滚就退出自治事务,则会引发异常。如果异常没被处理或由于其它未被处理的异常而导致事务结束,则事务会回滚。
为了正常退出,必须显式地提交或回滚所有自治事务。如果程序或它调用的程序有未决的事务,则PL/SQL会引发异常,未决的事务被回滚。
(2)提交和回滚
COMMIT和ROLLBACK结束了活动的自治事务,但没有退出自治程序。当一个事务结束了,下一个SQL语句就开始了下一个事务。一个自治程序可以包含多个自治事务,如果它执行多个commit语句。
(3)保存点
保存点的作用域是定义它的事务。在主事务中定义的保存点与它的自治事务中定义的保存是无关的。即主事务和自治事务可以使用相同的保存点名称。
只能回滚到在当前事务中声明的保存点。在自治事务中不能回滚到在主事务中声明的保存点。要达到这种效果必须通过退出自治程序来继续主事务。
在主事务中,回滚到自治事务开始之前声明的一个保存点,不会回滚自治事务。因为自治事务是完全独立于主事务的。
(4)避免自治事务错误
不能在自治程序中自治事务开始时执行PIPE ROW语句,必须在执行PIPE ROW语句之前关闭自治事务。好在运行PIPE ROW语句之前,通常会提交或回滚自治事务。
为了避免错误,要记住:
n 如果自治事务试图访问由主事务所拥有的资源,可能会引发死锁。数据库在自治事务中引发异常,如果异常未被处理,则事务被回滚。
n 数据库初始化参数TRANSACTIONS指定了并发事务的最大数目。因为自治事务是与主事务并发运行,所以那个数目可能会被超出。
n 如果试图不提交或回滚就退出活动的自治事务,数据库会引发异常,如果异常没有得到处理,则事务被回滚。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/17013648/viewspace-1123695/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/17013648/viewspace-1123695/