我在下面写了FUNCTION
来检查给定的引用号
是否存在。
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
中调用了此函数。当我插入数据时,我收到错误
ORA-06503: PL/SQL: 返回的函数没有值
我该如何解决这个问题?
PS:我不会将数据插入到 cash
表中。我正在将数据插入另一个表(假设它是表 B),并在它的(表 B)AFTER INSERT TRIGGER
中调用此函数。
最佳答案
所有函数都必须执行 RETURN 语句。您的函数的异常 block 中有 RETURN,因此该语句在正常情况下不会执行。
通过附加的 begin end
block 及其自己的 exception
部分封闭 select
语句将解决您的问题。所以你的函数可能如下所示:
create or replace function find_reference_no(
p_ref_no IN VARCHAR2) return varchar2
AS
v_ref_no varchar2(50);
begin
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 := '#';
end;
return v_ref_no;
end;
关于oracle - PL/SQL 函数返回无值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15334301/