PL/SQL 异常

Posted

技术标签:

【中文标题】PL/SQL 异常【英文标题】:PL/SQL Exceptions 【发布时间】:2014-07-10 09:47:08 【问题描述】:
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】:

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

如果您将when others 放在一个单独的块中,它总是会被引发,因为...在该块中没有already catched 例外可以从others 中排除。

来自文档

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

所以

exception

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

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

end;

【讨论】:

以上是关于PL/SQL 异常的主要内容,如果未能解决你的问题,请参考以下文章

PL/SQL 异常不会引发

PL/SQL:捕获编号异常?

PL/SQL 异常以啥顺序引发?

PL/SQL 异常翻译

Oracle笔记4-pl/sql-分支/循环/游标/异常/存储/调用/触发器

PL/SQL 异常处理