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被调用一次,请问如何解释?
------解决思路----------------------
很怪异的现象,感觉和你函数的实现有关,函数中是否有递归调用
另外有2个疑问
1、你用啥方法确认的调用几次
2、你的函数里都写了啥
------解决思路----------------------
LZ 你把调整用这个存储过程的语句,贴出来。
怀疑你的语句调用了两次。
------解决思路----------------------
CREATE OR REPLACE PROCEDURE p_kkk1
IS
CURSOR c_dl IS
SELECT ID,
ZZJGDM
FROM T_FR_DL;
c_row c_dl%ROWTYPE;
intIndex NUMBER;
BEGIN
intIndex :=0;
FOR c_row IN c_dl LOOP
intIndex := intIndex + 1;
dbms_output.put_line('intIndex :'+intIndex );
BEGIN
UPDATE T_FR
SET QYZT = abc()
WHERE ZZJGDM = c_row.ZZJGDM;
END;
END LOOP;
END p_kkk1;
-----------
看看到底执行了几次