首页新闻找找看学习计划

Oracle游标中(确认游标所在表只有一条记录)函数被调用2次,如何解释?

0
悬赏园豆:10 [已解决问题] 解决于 2014-10-09 17:15
CREATE OR REPLACE PROCEDURE p_kkk1
IS
    CURSOR c_dl IS
        SELECT ID,
               ZZJGDM
          FROM T_FR_DL;
    c_row c_dl%ROWTYPE;
BEGIN
    FOR c_row IN c_dl LOOP
        BEGIN
            UPDATE T_FR
               SET QYZT = abc()
             WHERE ZZJGDM = c_row.ZZJGDM;
        END;
    END LOOP;

END p_kkk1;

T_FR_DL表中只有一条记录,当执行上述存储过程时,发现函数abc被调用2次,请问是何故?注:如果将更新语句改为:SET QYZT = (select abc() from dual)则发现abc函数被调用一次,请各位oracle大神不惜赐教!

另外,如果将update 部分独立执行(测试):

  UPDATE T_FR
               SET QYZT = abc()
             WHERE ZZJGDM = ‘’;

则发现函数abc被调用一次,请问如何解释?谢谢!!

绿杨阴里白沙堤的主页 绿杨阴里白沙堤 | 初学一级 | 园豆:52
提问于:2014-10-08 14:41
< >
分享
最佳答案
0

以上写法没有问题,set ...=function()或者 set ...=(select function() from dual)都可以。现在莫名其妙的好了,反复测试都没有出现函数被调用2次的情况出现。

绿杨阴里白沙堤 | 初学一级 |园豆:52 | 2014-10-09 17:15
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册