日期:2014-05-17  浏览次数:20859 次

beckhambobo(beckham)老大请进
续上一个帖子for   update   of   和for   update的区别
http://community.csdn.net/Expert/TopicView3.asp?id=5490597

beckhambobo老大提到的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之类的操作



------解决方案--------------------
帮顶
------解决方案--------------------
关注,研究
------解决方案--------------------
这个明显是beckhambobo老大失误,你还追问个不停
http://www.itpub.net/115220,1.html
------解决方案--------------------
指定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
------解决方案--------------------
呵呵 好热闹

beckhambobo(beckham):
常言说的好,姜还是老的辣。更何况ORACLE这个庞大的东西哪?
呵呵
------解决方案--------------------
学习了。
------解决方案--------------------
beckhambobo(beckham) ( ) 信誉:196 Blog 加为好友 2007-04-27 12:32:57 得分: 0


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


Top
beckhambobo(beckham) ( ) 信誉:196 Blog 加为好友 2007-04-27 12:33:57 得分: 0


三年在论坛上无发技术贴,年纪老了,字也误笔
********************************************************************************
呵呵,居然呆了三年:)