自治事务(autonomous transaction)允许你创建一个“事务中的事务”,它能独立于其父事务提交或回滚。利用自治事务,可以挂起当前执行的事务,开始一个新的事务,完成一些工作,然后提交或回滚,所有这些都不影响当前所执行的事务的状态。自治事务提供了一种pl/sql控制事务的新方法,可以用于:
1、顶层匿名块
2、本地(过程中的过程)、独立或打包的函数和过程
3、对象类型的方法
4、数据库触发器
自治事务又是如何工作的呢?下面来看一个例子,让我们对自治事务有一个更好的了解。
首先创建两个过程,一个是autonomous_insert(自治事务),另一个是nonautonomous_insert(非自治事务)。还有一个测试表t。
下面来观察pl/sql代码匿名块中非自治事务的行为:
从结果中可以看到,匿名块中的insert工作由非自治事务中提交。两个数据行都已经提交,所以没有什么可以rollback的。
接下来看看自治事务的行为方式(主要要先把表t中的数据全部删除):
在此,只有自治事务本身中的的工作得到提交,而在匿名块中的insert工作会rollback掉。自治事务过程的commit对匿名块中开始的父事务没有影响。本质上讲,这就是自治事务的精髓,并能了解自治事务到底能干什么。