大部分数据库,包括MS SqlServer, DB2, Oracle的事务都会影响游标.最常见的错误就是在游标中嵌入了一组事务,这时会导致数据库报错.
其原因是:
数据库程序中很重要的一点就是事务处理(transaction或者the unit of work(UOW))。事务当中的任何一部分失败,整个事物就会失败。利用COMMIT和ROLLBACK进行适当的事务控制对于保证数据完整性来说是至关重要的。
当在使用游标的时候使用COMMIT或者ROLLBACK语句时,游标的行动取决于是否在生命的时候加了WITH HOLD子句。如果一个游标在声明的时候没有指定WITH HOLD,那么它的所有资源(游标,锁,大对象数据类型或者LOB locators)都将在COMMIT或者ROLLBACK之后被释放。因此,如果需要在完成一个事务之后使用游标,就必须重新打开游标,并从第一行开始执行。如果定义了一个游标WITH HOLD,游标就会在事务之间保存它的位置和锁(lock)。需要明白的是,只有保证游标位置的锁被held了。
锁(lock)是个数据库对象(a database object),我们用它来控制多个应用访问同一个资源的方式。而一个LOB locator使存储在本地变量中的4字节的值,程序可以用它来查到数据库系统中的LOB对象的值
事务ROLLBACK关闭游标CURSOR问题原因及解决方案
最新推荐文章于 2022-11-14 18:08:38 发布
数据库事务中的ROLLBACK操作会影响游标,未使用WITH HOLD的游标会在COMMIT或ROLLBACK后关闭。WITH HOLD游标在COMMIT后保持打开,但在ROLLBACK后关闭。ROLLBACK会释放所有游标资源。解决方案是利用SAVE TRANSACTION来控制回滚范围,以保持游标状态。
摘要由CSDN通过智能技术生成