关于PB调用写有事务开始的存储过程出错的原因

来源:互联网 发布:在淘宝买衣服注意什么 编辑:程序博客网 时间:2024/06/05 03:13

在PB6.5的开发中遇到这样的问题:PB需要调用一个存储过程,这个存储过程中需要用到事务,所以在存储过程中就是用begin work开始事务,在后台调试,运行成功。

然后在PB中 declare游标,execute游标,返回结果出错,错误号是-535(Already in transaction)。而且现象很奇怪,第一次运行的时候报错,在画面不关闭的情况下运行第二次就不会报错。

 

导致这个现象的原因就在于PB中事务的自动属性设置。

事务的属性:

autocommit:定义应用程序是如何提交事务 该属性是为支持自动提交的数据库管理系统提供的,其有效取值为TRUE——PowerBuider 自动提交每一条SQL语句,如果SQL语句执行成功 ,数据库管理系统立即更新数据库,就像SQL语句后面紧接着执行了COMMIT 提交语句一样,FALSE——程序通过提交语句COMMIT 提交事务,PowerBuider 在与数据库建立连接之后开始一个事务,在执行COMMIT或ROLLBACK 语句后结束前一事务并开始下一个事务,FALSE是该属性的默认设置值。

因为PB中事务的自动属性默认设置是false,所以我们在建立游标的时候,其实就已经开始了一个事务。当我们在存储过程中是用begin work 开始事务的时候就提示错误。但是第二次执行的时候,因为我们在存储过程中结束掉了事务,并不是在PB中结束掉的,所以也就不会开始下一个事务了。

所以我们在调用需要在事务中处理的存储过程的时候不用开始事务,但是最好在执行存储过程之前先commit一次。防止之前的数据丢失。

原创粉丝点击