Oracle pl sql异常块将在何时执行

Posted

技术标签:

【中文标题】Oracle pl sql异常块将在何时执行【英文标题】:Oracle pl sql exception block will be executed when 【发布时间】:2013-04-26 16:16:15 【问题描述】:

如果我有一个 oracle pl/sql 过程,我会像这样定义一个异常块:

exception
WHEN OTHERS THEN
errMsg := substr(SQLERRM, 1, 100);
  dbms_output.put_line ('--> Error ALIAS1: ' || errMsg);
end;

无论引发什么样的异常都会执行吗?

【问题讨论】:

【参考方案1】:

WHEN OTHERS 是一个包罗万象的 PL/SQL 异常,它没有被它自己的 WHEN 子句显式处理。

出于这个原因,使用它通常不是一个好主意;很容易意外捕获并丢失有关发生不良事件的重要信息。您应该捕获并处理您期望遇到的特定异常。如果您确实想记录或记录任何其他异常,则应在异常处理程序中包含 RAISE,以便其他所有内容都能正常传播。

...
exception
    when others then
        errMsg := substr(SQLERRM, 1, 100);
        dbms_output.put_line ('--> Error ALIAS1: ' || errMsg);
        raise;
end;

阅读更多关于一般异常here 和关于OTHERS here 的信息。

【讨论】:

以上是关于Oracle pl sql异常块将在何时执行的主要内容,如果未能解决你的问题,请参考以下文章

oracle数据库之PL/SQL 块结构和组成元素

Oracle11G_PL/SQL

通过添加嵌入在 PL-SQL(Oracle 函数)中的 select 子句来处理异常

Oracle的PL_SQL的异常处理

Oracle PL/SQL编程

PL/SQL编程