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
三年在论坛上无发技术贴,年纪老了,字也误笔
********************************************************************************
呵呵,居然呆了三年:)