续上一个帖子for update of 和for update的区别
http://community.csdn.net/Expert/TopicView3.asp?id=5490597beckhambobo老大提到的bug,存在疑问如下:
where current of cursor_name不是用来表示游标取得的当前的纪录么
cursor t_sor is
select a.name
from a,b
where a.id = b.id
for update of a.id;
游标取得的是a表中的纪录,而delete b WHERE CURRENT OF t_sor;删除的是b表的数据,返回错误也是正常啊,为什么老大认为这个应该是错的呢
猜测where current of 取得游标指针指着的当前纪录的rowid,然后根据rowid进行update,delete之类的操作

解决方案 »

  1.   

    这个明显是beckhambobo老大失误,你还追问个不停
    http://www.itpub.net/115220,1.html
      

  2.   

    指定a表的x字段或者y字段没有区别,测试过程中无发现异样,在oracle官方文档找到说法,for update of 字段仅区分于多表联接中,进行字段表锁定,而字段本身并不参与操作条件衡量(之前本人测试不充分,导致误解)至于delete b WHERE CURRENT OF t_sor;删除的是b表的数据,返回错误也是正常啊,这句话本人估计游标锁定某表,不允许进行非锁定表事务处理.仅有例外情况,不使用锁定操作.例子如下:
    SQL> declare
      2      cursor t_sor is
      3      select a.id
      4      from a,b
      5      where a.id = b.id
      6      for update of a.id;
      7  begin
      8      for v_sor in t_sor loop
      9          delete b
     10          WHERE b.id = v_sor.id;
     11      end loop;
     12  end;
     13  /PL/SQL procedure successfully completed
      

  3.   

    本人已三年在论坛上发技术贴,感觉oracle随版本高增加了不少好东西,一直无时间研究,还向各位多多学习.
      

  4.   

    呵呵  好热闹beckhambobo(beckham):
    常言说的好,姜还是老的辣。更何况ORACLE这个庞大的东西哪?
    呵呵
      

  5.   

    to penning(飞鱼): 
    只是由于有人问for update of 和for update的区别的时候,beckhambobo老大在举例的时候提到了where current of ...这样的用法,猫猫知道的比较少,之前没有使用过,看到以后自己尝试了用了一下,提出疑问而已。
    猫猫学oracle并不是很长时间,以前没有考虑过两者的不同,itpub上的老帖子确实没有仔细查找,如果事先已经看到这篇帖子,就不需要发帖询问了,如果有让beckhambobo老大不高兴或者不乐意的地方,猫猫很郑重的表示歉意
      

  6.   

    beckhambobo(beckham) ( ) 信誉:196    Blog   加为好友  2007-04-27 12:32:57  得分: 0  
     
     
       本人已三年在论坛上发技术贴,感觉oracle随版本高增加了不少好东西,一直无时间研究,还向各位多多学习.
      
     
    Top  
     beckhambobo(beckham) ( ) 信誉:196    Blog   加为好友  2007-04-27 12:33:57  得分: 0  
     
     
       三年在论坛上无发技术贴,年纪老了,字也误笔
    ********************************************************************************
    呵呵,居然呆了三年:)