我写下面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