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

控制自治事务

自治程序中的第1SQL语句开始了一个事务。当一个事务结束之后,下一个SQL语句开始了另一个事务。上一次提交或回滚之后所有SQL语句构成了当前的事务,控制自治事务需要使用下面的语句:

COMMIT;

ROLLBACK [TO savepoint_name]

SAVEPOINT savepoint_name

SET TRANSACTION

 

1)进入和离开

当进入自治程序的可执行部分时,主事务挂起;当退出程序时,主事务恢复。

如果试图不提交或回滚就退出自治事务,则会引发异常。如果异常没被处理或由于其它未被处理的异常而导致事务结束,则事务会回滚。

为了正常退出,必须显式地提交或回滚所有自治事务。如果程序或它调用的程序有未决的事务,则PL/SQL会引发异常,未决的事务被回滚。

2)提交和回滚

COMMITROLLBACK结束了活动的自治事务,但没有退出自治程序。当一个事务结束了,下一个SQL语句就开始了下一个事务。一个自治程序可以包含多个自治事务,如果它执行多个commit语句。

3)保存点

保存点的作用域是定义它的事务。在主事务中定义的保存点与它的自治事务中定义的保存是无关的。即主事务和自治事务可以使用相同的保存点名称。

 

只能回滚到在当前事务中声明的保存点。在自治事务中不能回滚到在主事务中声明的保存点。要达到这种效果必须通过退出自治程序来继续主事务。

在主事务中,回滚到自治事务开始之前声明的一个保存点,不会回滚自治事务。因为自治事务是完全独立于主事务的。

4)避免自治事务错误

不能在自治程序中自治事务开始时执行PIPE ROW语句,必须在执行PIPE ROW语句之前关闭自治事务。好在运行PIPE ROW语句之前,通常会提交或回滚自治事务。

为了避免错误,要记住:

如果自治事务试图访问由主事务所拥有的资源,可能会引发死锁。数据库在自治事务中引发异常,如果异常未被处理,则事务被回滚。

数据库初始化参数TRANSACTIONS指定了并发事务的最大数目。因为自治事务是与主事务并发运行,所以那个数目可能会被超出。

如果试图不提交或回滚就退出活动的自治事务,数据库会引发异常,如果异常没有得到处理,则事务被回滚。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/17013648/viewspace-1123695/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/17013648/viewspace-1123695/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值