簡體   English   中英

PL / SQL遞歸函數不返回任何值

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM