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被调用一次,请问如何解释?谢谢!!
以上写法没有问题,set ...=function()或者 set ...=(select function() from dual)都可以。现在莫名其妙的好了,反复测试都没有出现函数被调用2次的情况出现。