Oracle PL/SQL递归函数不返回任何值
我在运行Oracle PL/SQL递归函数时收到错误消息 返回的函数没有值 有人知道可能是什么问题吗 这是我的函数Oracle PL/SQL递归函数不返回任何值,oracle,plsql,Oracle,Plsql,我在运行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 (
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;
如果
t_ic_chk=1
将递归函数的值赋回到变量:n\u inv\u code
然而,你什么都不做。
你可能想退货
我建议您在最后一节中使用此代码:
IF t_ic_chk = 1
THEN
n_inv_code := cgic(cnt);
END IF;
RETURN n_inv_code;
END cgic;
这就是您所需要的:
1) 如果您找到一行,则递归返回,直到找不到一行,然后返回该值。
2) 如果找不到行,请返回该值。
3) 如果您找到一行,只需将返回的值与呼叫您的人握手。在事件
t_ic_chk=1
将递归函数的值赋回到变量:n\u inv\u code
但是,你什么都不做。
你可能想退货
我建议您在最后一节中使用此代码:
IF t_ic_chk = 1
THEN
n_inv_code := cgic(cnt);
END IF;
RETURN n_inv_code;
END cgic;
这就是您所需要的:
1) 如果您找到一行,则递归返回,直到找不到一行,然后返回该值。
2) 如果找不到行,请返回该值。
3) 如果您找到了一行,只需手摇动返回给呼叫您的人的值。如果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
参数,因为除了在递归调用中传递它之外,它从未在过程中使用过
祝您好运。如果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
参数,因为除了在递归调用中传递它之外,它从未在过程中使用过
祝你好运。如果t_ic_chk 1
,当rownum=1时,会发生什么情况?完整的ORA代码错误是什么?你是在编译时还是运行时得到的?ORA-06503:PL/SQL:函数返回时没有值ORA-06512:at“ESAPP.EXPORT”,第24行ORA-06512:at“ESAPP.EXPORT”,第426行ORA-06512:在第1行
当shell脚本调用调用此函数的SP时,会在运行时引发错误。第24行是SP的声明,第426行是函数调用。函数的执行路径不以return
语句结尾。这只是函数实现中的一个bug。不幸的是,编译器不会捕捉到您的错误(至少在11gR2中),但异常仅在运行时发生。当t_ic_chk 1
时会发生什么?rownum=1时,它不应该总是0或1吗?完整的ORA代码错误是什么,您是在编译时得到的吗,或运行时?ORA-06503:PL/SQL:函数返回时没有值ORA-06512:在“ESAPP.EXPORT”第24行ORA-06512:在“ESAPP.EXPORT”第426行ORA-06512:在第1行
当shell脚本调用调用此函数的SP时,会在运行时引发错误。第24行是SP的声明,第426行是函数调用。函数的执行路径不以return
语句结尾。这只是函数实现中的一个bug。不幸的是,编译器不会捕捉到您的错误(至少在11gR2中),但异常只发生在运行时。谢谢。我实际上是在SP内的循环中调用此函数,并且不想在出现异常时退出。谢谢。我实际上是在SP内的循环中调用此函数,当出现异常时不想退出。哦,是的。我忘记了这里的返回部分,希望递归调用返回它。。。。太多了!哦,是的。我忘记了这里的返回部分,希望递归调用返回它。。。。太多了!