FOR UPDATE 关键字告知数据库服务器更新操作是可能的,并会引发数据库服务器使用比对 Select 游标更严格的锁定。您声明一个更新游标可让数据库服务器知道程序可能更新(或删除)它取得的作为 SELECT 语句一部分的任何行,更新游标为程序取得的行使用可升级锁定(也称写锁)。在程序修改行之前,会将行锁提升为互斥锁。
使用 WITH HOLD 关键字声明一个更新游标是可能的,但是这样做的唯一原因是将一长串的更新打断成较小的事务。您必须在同一个事务中取得并更新特定的行。
如果操作涉及取和更新大量的行,则数据库服务器维护的锁表会溢出。防止这种溢出的通常方式是锁定整个正在更新的表。如果此操作是不可能的,那么一种替换的方式是通过 Hold 游标来更新,并按时间间隔执行 COMMIT WORK 。但是,您必须谨慎地计划这样的应用程序,因为 COMMIT WORK 会释放所有的锁,甚至是那些通过 Hold 游标放置的锁。