[英]PL/SQL recursive function return no value
運行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;
如果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)如果您發現了一行,則只需將返回給您的人的值握手即可。
從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
參數,因為它在過程中從未使用過,只是在遞歸調用中傳遞它。
祝你好運。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.