【发布时间】:2013-12-05 16:55:21
【问题描述】:
plsql 中是否有类似异常层次结构的东西?我用谷歌搜索了这个,没有任何相关的东西出现。我知道我们应该将“WHEN OTHERS THEN”作为例外部分的最后一部分。关于其他例外,是否有类似层次结构的东西?还是所有异常都属于“WHEN OTHERS”,并且在某种程度上它是所有异常的基础,很像 Java 中的 Exception 类?
【问题讨论】:
plsql 中是否有类似异常层次结构的东西?我用谷歌搜索了这个,没有任何相关的东西出现。我知道我们应该将“WHEN OTHERS THEN”作为例外部分的最后一部分。关于其他例外,是否有类似层次结构的东西?还是所有异常都属于“WHEN OTHERS”,并且在某种程度上它是所有异常的基础,很像 Java 中的 Exception 类?
【问题讨论】:
没有层次结构,每个异常都有自己的代码(除了您没有定义代码的用户定义的异常),可用于单独捕获异常。 EXCEPTION WHEN OTHERS 只是捕获每一个异常,这就是为什么使用不当会如此危险的原因。
如果您需要以分层方式捕获多个异常,您可以通过指定多个处理程序来指定捕获它们的顺序,例如:
exception
when dup_val_on_index then
insert ...
raise;
when user_definex_exception then
logerror(sqlcode);
when others then
raise;
这使您能够及早捕获特定异常,然后在捕获其余异常之前按照您的意愿处理(如果这是您希望执行的操作)。 the documentation里面的信息挺多的。
【讨论】: