Select
如何正確地從函式返回值
我想創建一個通過傳遞使用者名和密碼來查詢使用者表的函式,如果使用者名/密碼正確,該函式應該返回“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