Oracle函数中的错误传播

时间:2014-08-06 10:37:33

标签: oracle oracle10g

我有一个Oracle函数,它具有以下结构

Function TEST_FUNC(o_err_msg varchar2)
return BOOLEAN
is
begin
for C in 1..10
 loop
    begin
         insert into test
         values(c);
         return true;
    exception
      when no_data_found
            null;
      return true;
      when others then
            ---Some Code
         return false;
    end;
end loop;
end;

当我运行这个时,我得到ORA-06503:PL / SQL:返回没有值的函数。如何确保当内部BLOCK返回TRUE时函数RETURN TRUE,当返回FALSE时返回FALSE。

请帮忙。

1 个答案:

答案 0 :(得分:2)

这里的问题是你没有得到任何异常 - 所以LOOP成功执行但在LOOP完成后没有返回语句。你需要添加一个:

Function test_func(o_err_msg varchar2) return boolean is
begin
   for c in 1..10 loop
      begin
         insert into test
         values(c);
      exception
         when no_data_found
           return true;
         when others then
            ---Some Code
            return false;
       end;
   end loop;
   return True;
end test_func;

其他问题:

  • INSERT语句不会返回NO_DATA_FOUND异常,这在使用SELECT INTO时会引发(也许你的意思是DUP_VAL_ON_INDEX?)
  • 请缩进!
  • 如果您使用功能名称结束功能,以后会有所帮助,这只是为了清晰起见。
  • 如果您真的这样做,那么最好使用单个INSERT语句。