oracle - PL/SQL 函数返回无值

标签 oracle function plsql oracle11g

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

相关文章:

python - 获取 int() 和 float() 函数的函数对象

excel - 是否可以在 VBA 中对函数调用进行分组?

svn - Mercurial 的函数历史记录

Oracle 从类型为 number 的数组中获取不同的值

oracle - PL/SQL,如何转义字符串中的单引号?

sql - 关于触发顺序

SQL 如何从字符串中提取数字?

Oracle 分区间隔(按天)- 错误的高值?

oracle - 小于或等于 Oracle SQL

java - 如何在 Java 中加入 ResultSet 对象?