Oracle函数中的错误传播

Oracle函数中的错误传播,oracle,oracle10g,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; retur

我有一个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:函数,返回时没有值。如何确保当内部块返回TRUE时函数返回TRUE,当返回FALSE时函数返回FALSE


请提供帮助。

这里的问题是您没有得到任何异常-因此循环成功执行,但在循环完成后没有返回语句。您需要添加一个:

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_?)
  • 请缩进
  • 如果用函数名结束函数,这对以后的工作很有帮助,这只会有助于清晰
  • 如果您确实在这样做,那么最好使用一条INSERT语句