AUTONOMOUS TRANSACTION(自治事务)的介绍[1]

[入库:2005年8月18日] [更新:2007年3月24日]

本文简介:选择自 black_snail 的 blog

 

 

在基于低版本的oracle做一些项目的过程中,有时会遇到一些头疼的问题.,比如想在执行当前一个由多个dml组成的transaction(事务)时,为每一步dml记录一些信息到跟踪表中,由于事务的原子性,这些跟踪信息的提交将决定于主事务的commit或rollback. 这样一来写程序的难度就增大了, 程序员不得不把这些跟踪信息记录到类似数组的结构中,然后在主事务结束后把它们存入跟踪表.哎,真是麻烦!

有没有一个简单的方法解决类似问题呢?

oracle8i的autonomous transaction(自治事务,以下at)是一个很好的回答。

at 是由主事务(以下mt)调用但是独立于它的事务。在at被调用执行时,mt被挂起,在at内部,一系列的dml可以被执行并且commit或rollback.

注意由于at的独立性,它的commit和rollback并不影响mt的执行效果。在at执行结束后,主事务获得控制权,又可以继续执行了。

见图1:

 

1:

 

如何实现at的定义呢?我们来看一下它的语法。其实非常简单。

只需下列pl/sql的声明部分加上pragma autonomous_transaction 就可以了。

1.  顶级的匿名pl/sql块

2.  functions 或 procedure(独立声明或声明在package中都可)

3.  sql object type的方法

本文关键:AUTONOMOUS TRANSACTION
 

本站最佳浏览方式为 分辨率 1024x768 IE 6.0(或更高版本的 IE浏览器)

go top