progress的数据库访问--事务
关键字:progress 4GL 数据库 事务 transaction database
什么是事务,我想就不用再多说了.这里只说一下在progress里事务在什么地方开始,什么地方结束.
首先要说的是,在progress种,一个当前会话同时最多只能拥有一个事务.当然可以在一个事务结束之后启动另外一个新的事务.
progress怎样知道一个事务是从什么地方开始,并且在什么地方结束呢? 这都是由事务块儿定义的.
如果当前会话没有事务,则以下语句块儿开始一个事务:
1.任何使用了关键字transaction的语句块儿,do,for each或者repeat
2.一个直接改变了数据库值的语句块儿,或者在读书数据库的时候使用了exclusive-lock锁.这样的语句块儿包括过程块儿,事件块儿,以及do on error,for each,repeat的每一次迭代.
直接改变数据库的值意味着该语句块儿至少包含一句代码可以改变数据库内容. 比如create,delete,update语句.
如果find或者for each语句指定了exclusive-lock,并且至少有一个不是嵌入在别的事物内部,则该语句块儿会使用exclusive-lock来读取数据.
要注意的是do语句块并不会自动的拥有事务属性,不过你可以显示的使用transaction属性.
小提示:有一个函数transaction可以返回当前所在处是否有一个活动的事务.注意该函数调用不需要括号.
下面的代码给出了演示:
/*trans-test.p*/
MESSAGE "the procedure block" skip transaction
VIEW-AS ALERT-BOX INFO BUTTONS OK.
repeat :
MESSAGE "
关键字:progress 4GL 数据库 事务 transaction database
什么是事务,我想就不用再多说了.这里只说一下在progress里事务在什么地方开始,什么地方结束.
首先要说的是,在progress种,一个当前会话同时最多只能拥有一个事务.当然可以在一个事务结束之后启动另外一个新的事务.
progress怎样知道一个事务是从什么地方开始,并且在什么地方结束呢? 这都是由事务块儿定义的.
如果当前会话没有事务,则以下语句块儿开始一个事务:
1.任何使用了关键字transaction的语句块儿,do,for each或者repeat
2.一个直接改变了数据库值的语句块儿,或者在读书数据库的时候使用了exclusive-lock锁.这样的语句块儿包括过程块儿,事件块儿,以及do on error,for each,repeat的每一次迭代.
直接改变数据库的值意味着该语句块儿至少包含一句代码可以改变数据库内容. 比如create,delete,update语句.
如果find或者for each语句指定了exclusive-lock,并且至少有一个不是嵌入在别的事物内部,则该语句块儿会使用exclusive-lock来读取数据.
要注意的是do语句块并不会自动的拥有事务属性,不过你可以显示的使用transaction属性.
小提示:有一个函数transaction可以返回当前所在处是否有一个活动的事务.注意该函数调用不需要括号.
下面的代码给出了演示:
/*trans-test.p*/
MESSAGE "the procedure block" skip transaction
VIEW-AS ALERT-BOX INFO BUTTONS OK.
repeat :
MESSAGE "