我寫下面FUNCTION
檢查給定reference number
是否存在。PL/SQL函數返回無值
FUNCTION find_reference_no(
p_ref_no IN VARCHAR2) RETURN VARCHAR2
AS
v_ref_no varchar2(50);
BEGIN
select REF_NO into v_ref_no from cash where REF_NO = p_ref_no;
EXCEPTION
WHEN no_data_found THEN
v_ref_no := '#';
RETURN v_ref_no;
END;
我在AFTER INSERT TRIGGER
中調用了這個函數。當我插入數據,Ii'm得到錯誤的
ORA-06503: PL/SQL: Function returned without value
我該如何解決這個問題?
PS:我沒有將數據插入到cash
表中。我將數據插入另一個表(假設它是表B),並在它的(表B)AFTER INSERT TRIGGER
中調用該函數。
這種在觸發器中的查找正是我們應該避免在觸發器中做的那種。這是每個插入的隱藏性能,並且會損害應用程序的可伸縮性。 – APC 2013-03-11 09:15:30
而不是用p_前綴你的參數名稱,考慮在查詢中用參數名稱作爲參數名稱的前綴 - 即。 「where cash.ref_no = find_reference_no.ref_no」。 v_也作爲變量的前綴冗餘,它也應該是數據類型爲cash.ref_no%Type而不是varchar2(50)。 – 2013-03-11 10:08:00
問題不明顯的原因是您的代碼格式錯誤 - RETURN語句*看起來像它是函數正常處理的一部分,而它實際上在函數的EXCEPTION塊內。爲了清楚起見,EXCEPTION關鍵字應該位於左側邊界,與BEGIN和END相同。 – 2013-03-12 03:33:22