Select

如何正確地從函式返回值

  • April 2, 2014

我想創建一個通過傳遞使用者名和密碼來查詢使用者表的函式,如果使用者名/密碼正確,該函式應該返回“Y”,如果不正確,則返回“N”。

返回值被初始化為“N”,我檢查函式是否使用 SQL%FOUND 將“Y”分配給返回變數。

我收到以下錯誤:06503. 00000 - “PL/SQL:函式返回沒有值”

CREATE OR REPLACE FUNCTION VERIFY 
                    ( userName IN VARCHAR2, 
                      userPassword VARCHAR2
                    )
                 RETURN VARCHAR2
AS
returnVar VARCHAR2(1):='N';
userID number;
zip number;
BEGIN
  SELECT userId,SUBSTR(ZIPCODE, 1,3)
   INTO userID,zip
FROM users
WHERE username = userName AND PASSWORD = userPassword;
if SQL%FOUND then
  returnVar:='Y';
end if;
return returnVar;
EXCEPTION
    WHEN NO_DATA_FOUND THEN DBMS_OUTPUT.PUT_LINE('NO DATA FOUND');
END VERIFY;

注意:如果您想知道為什麼我選擇使用者 ID 和 zip:當該功能正常工作並經過測試時,我會將其包含在一個包中,以使使用者 ID 和郵政編碼在全球範圍內可用,這是練習的要求我正在努力。

當什麼都沒找到時,你應該返回一些東西。在聲明中的異常註釋之前。

你的常式的編寫方式可能沒有找到任何東西,然後在沒有返回任何內容的情況下到達函式的末尾,因此出現 error function returned without value

解決方法:

處理異常

exception
  when TOO_MANY_ROWS then
       return 'Error bla bla '; -- do something meaningful here 
  when NO_DATA_FOUND then
       return null; -- if you want to return null on nothing found

引用自:https://dba.stackexchange.com/questions/62373