我在下面写了FUNCTION
来检查给定的reference number
是否存在。
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: Function returned without value
我该如何解决这个问题?
PS:我没有将数据插入cash
表。我正在将数据插入另一个表(假设它是表B)并在其中调用此函数(表B)AFTER INSERT TRIGGER
。
答案 0 :(得分:9)
所有函数必须执行RETURN语句。您的函数在其异常块中具有RETURN,因此该语句在正常情况下不会执行。
使用其select
部分附加begin end
块附加exception
声明将解决您的问题。所以你的功能可能如下所示:
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;
答案 1 :(得分:2)
由于函数只返回与参数相同的值(如果它存在于表中),您可以避免使用异常处理并将其重写为:
function find_reference_no(
ref_no in varchar2)
return varchar2
as
row_count integer
begin
select count(*)
into row_count
from cash
where cash.ref_no = find_reference_no.ref_no and
rownum = 1
if row_count = 0
return '#'
else
return ref_no
end if;
end find_reference_no;
我会返回1或0(即row_count的值)来表示该记录确实存在或不存在。
function find_reference_no(
ref_no in varchar2)
return varchar2
as
row_count integer
begin
select count(*)
into row_count
from cash
where cash.ref_no = find_reference_no.ref_no and
rownum = 1
return row_count
end find_reference_no;