在多数情况下,提取循环中所完成的处理都会修改由游标检查出的行,PL/SQL提供了进行这样处理的一种语法。 这种语法包括两部分——在游标声明部分的FOR UPDATE子句和在UPDATE或DELETE语句中的WHERE CURRENT OF 子句。 通常,SELECT操作将不会对正处理的行执行任何锁定设置,这使得连接到该数据库的其他会话可以改变正在选择的数据。 但是,结果集仍然是一致性的。当确定了活动集以后,在执行OPEN的时刻,Oracle会截取下该表的一个快照。在此时刻以前所提交的任何更改操作都会在活动集中反映出来。在此时刻以后所进行的任何更改操作,即使已经提交了它们,都不会被反映出来,除非将该游标重新打开。但是使用FOR UPDATE子句,在OPEN返回以前的活动集的相应行上会加上互斥锁,这些锁会避免其他的会话对活动集中的行进行更改。直到整个事务被提交为止。
示例: DECLARE CURSOR C_CUR IS SELECT * FROM STUDENDS FOR UPDATE OF XM; BEGIN OPEN C_CUR; WHILE C_CUR%FOUND LOOP
UPDATE STUDENDS SET XM='AA'XM WHERE CURRENT OF C_CUR;