【问题标题】:Oracle pl sql exception block will be executed whenOracle pl sql异常块将在何时执行
【发布时间】: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;
无论引发什么样的异常都会执行吗?
【问题讨论】:
标签:
oracle
exception
plsql
oracle11g
【解决方案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 的信息。