ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 游标与事务控制

游标与事务控制

原创 Linux操作系统 作者:流浪天际 时间:2011-08-22 19:44:02 0 删除 编辑
1、游标循环里是否可以使用事务控制??
 数据库程序中很重要的一点就是事务处理(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对象的值
      A:定义了WITH HOLD的游标在COMMIT之后
       1.仍然保证是打开(open)的
       2.游标指向下一个满足条件的行之前
       3.在COMMIT语句之后只允许FETCH和CLOSE
       4.Positioned delete和positioned update只在同一事务中fetch的行上可用
       5.所有的LOB locators会被释放
       6.除了保存声明为WITH HOLD的游标位置的锁,其他锁都会释放
       7.当执行了数据修改语句或者含有WITH HOLD游标的修改语句被commit的时候
      B:所有定义为WITH HOLD的游标在ROLLBACK之后:
       1.所有游标会被关闭
       2.所有在该事务中的锁会被释放
       3.所有的LOB locators会被freed

无论是否使用with hold与否,rollback将释放session中的游标。commit只释放不带with hold的游标。 
2、

3、来自其他:
在SQL中有一个设置的选项SET   CURSOR_CLOSE_ON_COMMIT   {   ON   |   OFF   }可以控制在提交事务时是否关闭游标。 

当   SET   CURSOR_CLOSE_ON_COMMIT   为   ON   时,该设置遵从   SQL-92   标准,在提交或回滚时关闭任何打开的游标。
当   SET   CURSOR_CLOSE_ON_COMMIT   为   OFF   时,提交事务时不关闭游标。 
当   SET   CURSOR_CLOSE_ON_COMMIT   为   OFF   时,ROLLBACK   语句将只关闭打开的未完全填充的异步游标。如果回滚修改,在进行修改后打开的   STATIC   或   INSENSITIVE   游标将不再反映数据的状态。 
当   SET   CURSOR_CLOSE_ON_COMMIT   为   ON   时,ROLLBACK   语句关闭所有打开的游标。
当   SET   CURSOR_CLOSE_ON_COMMIT   为   OFF   时,ROLLBACK   语句将关闭所有打开的游标,那些被定义为   INSENSITIVE   或   STATIC   的游标除外;但未完全填充的异步   STATIC   游标将关闭。如果回滚修改,在进行修改后打开的   STATIC   或   INSENSITIVE   游标将不再反映数据的状态。 

SET   CURSOR_CLOSE_ON_COMMIT   控制与   sp_dboption   的   cursor   close   on   commit   数据库选项相同的行为。如果   CURSOR_CLOSE_ON_COMMIT   设置为   ON   或   OFF,则在连接上使用该设置。如果未指定   SET   CURSOR_CLOSE_ON_COMMIT,则应用   sp_dboption   的   cursor   close   on   commit   设置。 
SQL   Server   ODBC   驱动程序和用于   SQL   Server   的   Microsoft   OLE   DB   提供程序均在连接时将   CURSOR_CLOSE_ON_COMMIT   设置为   OFF。DB-Library   不自动设置   CURSOR_CLOSE_ON_COMMIT   值。 
当   SET   ANSI_DEFAULTS   为   ON   时,将启用   SET   CURSOR_CLOSE_ON_COMMIT。 
SET   CURSOR_CLOSE_ON_COMMIT   的设置是在执行或运行时设置,而不是在分析时设置。 
SET   CURSOR_CLOSE_ON_COMMIT   权限默认授予所有用户。 

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/17032106/viewspace-705573/,如需转载,请注明出处,否则将追究法律责任。

上一篇: 初涉DB2开发
请登录后发表评论 登录
全部评论

注册时间:2010-12-27

  • 博文量
    39
  • 访问量
    87424