ITPub博客

首页 > 数据库 > Oracle > PLSQL Language Referenc-PL/SQL静态SQL-自治事务-控制自治事务

PLSQL Language Referenc-PL/SQL静态SQL-自治事务-控制自治事务

原创 Oracle 作者: luisedalian 时间:2014-03-18 00:07:28 0 删除 编辑

控制自治事务

自治程序中的第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博客 ” ,链接:https://blog.itpub.net/17013648/viewspace-1123695/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2012-02-06

  • 博文量
    1986
  • 访问量
    6044094