运行Oracle PL / SQL递归函数时收到错误消息
函数返回没有值
任何人都知道可能是什么问题?
这是我的功能
FUNCTION cgic (cnt IN NUMBER)
RETURN VARCHAR2
IS
n_inv_code VARCHAR2 (20);
t_ic_chk NUMBER;
BEGIN
SELECT DBMS_RANDOM.STRING ('X', 10)
INTO n_inv_code
FROM DUAL;
select count(*) into t_ic_chk from inv_code where inv_code = n_inv_code and rownum = 1;
IF t_ic_chk = 1
THEN
n_inv_code := cgic(cnt);
ELSE
IF t_ic_chk = 0
THEN
RETURN n_inv_code;
END IF;
END IF;
END cgic;
答案 0 :(得分:3)
事件t_ic_chk = 1
将递归函数的值赋给变量:n_inv_code
我会在最后一节推荐这段代码:
IF t_ic_chk = 1
THEN
n_inv_code := cgic(cnt);
END IF;
RETURN n_inv_code;
END cgic;
这就是你所需要的:
1)如果找到一行,请重新递归,直到找不到,然后返回该值。 2)如果找不到行,则返回该值。 3)如果你发现了一排,只需用手甩掉返回给你的人。
答案 1 :(得分:0)
以IF t_ic_chk = 1
开头的代码可能会替换为
CASE t_ic_chk
WHEN 0 THEN RETURN n_inv_code;
WHEN 1 THEN RETURN cgic(cnt);
ELSE RAISE_APPLICATION_ERROR(-20202, 'Unexpected t_ic_chk value=' || t_ic_chk);
END;
通过这种方式,您的函数将返回预期值,或者如果它不知道如何处理它在t_ic_chk中找到的值,则会引发异常。
我确实想知道你为什么要传递cnt
参数,因为它在程序中从未使用过,除非在递归调用中传递它。
祝你好运。