PL / SQL异常

时间:2014-07-10 09:47:09

标签: sql oracle exception plsql

begin

  begin

     do something;

  exception

    when no_data_found then
      raise_application_error(-20000,"Message");

  end;

 exception

    when others then
        raise_application_error(-20000,"Other message");

 end;

我的问题是,当编译器捕获“消息”错误时,它也会捕获“其他消息”错误。为什么会这样?

1 个答案:

答案 0 :(得分:4)

尝试将它们放在同一个异常块中。

如果您将when others放在一个单独的区块中,它就会被提升,因为......在该区块中排除already catched之外没有others例外。

来自doc

  

WHEN OTHERS子句用于捕获尚未由命名系统异常和命名程序定义的异常处理的所有剩余异常。

所以

exception

    when no_data_found then
      raise_application_error(-20000,"Message");

    when others then
      raise_application_error(-20000,"Other message");

end;