在包中如何实现函数的递归调用??
在一个包中有这样一个函数,需要递归调用:
FUNCTION GET_ITEM_CONFIG(ERRBUF OUT VARCHAR2,
RETCODE OUT NUMBER,
P_LINE_ID NUMBER,
P_PARENT_CONFIG_ID NUMBER,
P_NUMBER NUMBER) RETURN NUMBER IS
V_CONFIG_ID NUMBER;
V_HEADER_C VARCHAR2(240);
V_NUMBER NUMBER;
V_DESCRIPTION VARCHAR2(1000);
V_ERRBUF VARCHAR2(240);
V_RETCODE VARCHAR2(240);
CURSOR CUR_A IS
SELECT CONFIG_ID
FROM BF_ITEM_CONFIGS
WHERE PARENT_CONFIG_ID=P_PARENT_CONFIG_ID
AND ORDER_LINE_ID=P_LINE_ID
ORDER BY CONFIG_ID;
BEGIN
OPEN CUR_A;
LOOP
FETCH CUR_A INTO V_CONFIG_ID;
EXIT WHEN CUR_A%NOTFOUND;
IF V_CONFIG_ID<>P_PARENT_CONFIG_ID THEN
GET_ITEM_CONFIG(V_ERRBUF,
V_RETCODE,
P_LINE_ID,
V_CONFIG_ID,
P_NUMBER + 1);
ELSE
V_NUMBER:=P_NUMBER;
V_HEADER_C:='';
LOOP
EXIT WHEN V_NUMBER=0;
V_HEADER_C:=V_HEADER_C || V_SEPERATE;
V_NUMBER:=V_NUMBER - 1;
END LOOP;
SELECT ASSEMBLY_ITEM_NUMBER||' '||
COMPONENT_ITEM_NUMBER||' '||
ITEM_NUMBER||' '||
ITEM_DESCRIPTION_CN
INTO V_DESCRIPTION
FROM BF_ITEM_CONFIGS
WHERE ORDER_LINE_ID=P_LINE_ID
AND CONFIG_ID=V_CONFIG_ID
AND PARENT_CONFIG_ID=P_PARENT_CONFIG_ID;
FND_FILE.PUT_LINE(FND_FILE.OUTPUT,TO_CHAR(P_NUMBER)||V_HEADER_C||V_DESCRIPTION);
END IF;
END LOOP;
CLOSE CUR_A;
RETURN V_CONFIG_ID;
END;
但是编译的时候报:函数GET_ITEM_CONFIG()未定义。
如何预定义函数?
这个问题如何解决呢?
谢谢!!
问题点数:100、回复次数:4Top
1 楼WangZWang(先来)回复于 2005-09-30 09:30:50 得分 10
调用时用execute immediate动态语句执行试试!Top
2 楼sbaz(万神渡劫)回复于 2005-09-30 10:00:27 得分 60
GET_ITEM_CONFIG(V_ERRBUF,
V_RETCODE,
P_LINE_ID,
V_CONFIG_ID,
P_NUMBER + 1);
这里有点问题.P_NUMBER + 1应该用一个值来表示吧.
你先用NUM=P_NUMBER+1;
再写GET_ITEM_CONFIG(V_ERRBUF,
V_RETCODE,
P_LINE_ID,
V_CONFIG_ID,
NUM);试试?记得在前面声明这个变量!
我写了个简单的.
create or replace function dy(i in out number) return number is
n number;
begin
if i=1 then
return 1;
else
n:=i-1;
return i*dy(n);
end if;
end dy;
declare
-- Local variables here
i integer :=6;
begin
-- Test statements here
i:=dy(i);
dbms_output.put_line(i);
end;
打印出结果:720
你可以参考一下.Top
3 楼bobfang(匆匆过客)回复于 2005-09-30 10:11:41 得分 30
楼主在GET_ITEM_CONFIG中递归调用函数处写错了,函数是有返回值的,不能直接调用,只能定义一个变量,然后变量:=函数(...)。Top
4 楼sbaz(万神渡劫)回复于 2005-09-30 10:42:57 得分 0
感觉楼主的程序很乱,很多地方都有问题.
递归的时候参数都没值,怎么执行啊?你还在外层用循环,是不是有那么复杂啊?Top




