在Oracle 12.1中,我有一個相當簡單的PL/SQL例程。輸出是單個值,可以是逗號分隔的名稱列表或字符串「NO_DATA」。沒有其他輸出允許。對於輸入,有一個單一的值,一個公司名稱。如果我硬編碼公司名稱,並從SQL窗口運行SQL語句(不是函數),它運行良好,所以我知道SQL是有效的。這個問題與異常處理有關。如果我沒有任何異常處理,並傳遞一個有效的名稱給函數,它會給我一個有效的輸出。當我找不到數據時,我需要能夠處理這種情況,所以我添加了簡單的異常處理。這是我得到我的問題的地方。有了異常處理代碼,如果我傳入了一個不合適的值(又名公司名稱,未找到),我就會像'我應該'那樣得到'NO_DATA'。如果我傳遞了一個很好的值,那麼我得到一個PL/SQL錯誤ORA-06503:PL/SQL:函數返回時沒有值。這是我的代碼。PL/SQL異常處理 - 函數無返回值返回
create or replace FUNCTION authorized_email(nn1 in varchar2)
RETURN varchar2
IS
thisName varchar2(4000);
Output varchar2(4000);
-- this routine build the list of comma seperated authorized users
BEGIN
SELECT NN_Name,
nvl(replace(Upper(LISTAGG(Name, ',') WITHIN GROUP (ORDER BY Name)), '@XYZ.COM', NULL), 'NO_DATA') AS Names
into thisName, Output
FROM (
SELECT DISTINCT(NN_NAME),
Name
FROM LINE_ITEMS
UNPIVOT(name FOR typ IN (
FMW_MGR_L3_EMAIL,
FMW_MGR_L4_EMAIL,
FMW_MGR_L5_EMAIL,
FMW_MGR_L6_EMAIL,
FMW_MGR_L7_EMAIL,
FMW_EMAIL,
HYBRID_MGR_L3_EMAIL,
HYBRID_MGR_L4_EMAIL,
HYBRID_MGR_L5_EMAIL,
HYBRID_MGR_L6_EMAIL,
HYBRID_MGR_L7_EMAIL,
HYBRID_REP,
TECH_MGR_L3_EMAIL,
TECH_MGR_L4_EMAIL,
TECH_MGR_L5_EMAIL,
TECH_MGR_L6_EMAIL,
TECH_MGR_L7_EMAIL,
TECH_EMAIL)
))
where NN_NAME = nn1
GROUP BY NN_NAME;
EXCEPTION
WHEN no_data_found then
Output := 'NO_DATA';
return Output;
END;
我的EXCEPTION HANDLING代碼有問題,但我無法確定它是什麼。任何幫助感謝!
所以,你還需要'返回輸出;'了'EXCEPTION'塊之前。 – mathguy
那是我的罪魁禍首。謝謝! – user1009073