Oracle 返回的PL/SQL函数没有值
我在下面写了Oracle 返回的PL/SQL函数没有值,oracle,function,plsql,oracle11g,Oracle,Function,Plsql,Oracle11g,我在下面写了函数,检查给定的参考号是否存在 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 :
函数
,检查给定的参考号是否存在
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;
我在插入触发器后的中调用了此函数。当我插入数据时,我得到的错误如下
ORA-06503:PL/SQL:Function返回时没有值
我怎样才能解决这个问题
PS:我没有在cash
表中插入数据。我正在将数据插入另一个表(假设它是表B),并在插入触发器后在其(表B)中调用此函数
所有函数都必须执行返回语句。您的函数在其异常块中具有返回,因此该语句在正常情况下不会执行
通过附加的begin-end
块将select
语句包含在自己的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;
由于函数仅返回与参数相同的值(如果参数存在于表中),因此可以避免异常处理的尴尬使用,并将其重写为:
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;
触发器中的这种查找正是我们应该避免在触发器中进行的那种查找。这是一个隐藏的性能在每个插入,并将损害你的应用程序的可扩展性,而不是预先用Py的参数名称,考虑预先在参数中的名称名称的查询功能,即“。v_作为变量的前缀也是多余的,变量的数据类型也应该是cash.ref_no%Type,而不是varchar2(50)。问题不明显的原因是您有误导性的代码格式-返回语句看起来像是函数正常处理的一部分,而实际上它在函数的异常块中。EXCEPTION关键字实际上应该位于左侧空白处,与BEGIN和END处于同一级别-为了清晰起见。