为何要加上查询条件,where current of 加上此游标  --已上查询条件了
如:
declare
cursor t_sor is
select name from aa for update;
begin
for v_sor in t_sor loop
update aa set value='3' where current of v_sor;   --已限制了条件了,更新只是当前记录集
end loop; 
end;
/

解决方案 »

  1.   


      注意, where current of 子句只能在定义游标的时候使用了 for update语句才可以使用。for v_sor in t_sor loop
    update aa set value='3' where current of v_sor;   --已限制了条件了,更新只是当前记录集
    end loop;   上面的语句中 v_sor 是 t_sor中的一行数据,更新的时候应该用 current of t_sor吧,因为v_sor只是一个隐式游标,它本身不是通过 for update定义的,只是代表了循环中t_sor的当前记录。这样,你的update语句或者delete语句的作用范围就只在你循环的当前行的范围中了。
      要注意的是,用for update定义的游标会让数据库对涉及的行加锁,别的会话如果要访问该游标中的行便会进入等待状态。你也可以明确指明要加锁的列,用 for update of "列名"  就可以了。
      如果你的select for update选中的行已经被别的会话加锁的话,会话就需要等待解锁,如果别的会话一直不解锁,那么你的select就会一直等待下去,如果你不想等,只需在for update后面加上nowait就可以解决这个问题了,这样你的选择会立即返回。
      

  2.   

    唉, beckhambobo(beckham)怎么老是和我抢分啊。