plsql中是否有类似异常的层次结构?我用Google搜索,没有任何相关内容。我知道我们应该将“当其他人”作为例外部分的最后部分。关于其他例外是否有类似层次结构的东西?或者所有例外都集中在“WHEN OTHERS”之下,它在某种程度上是所有异常的基础,就像Java中的Exception类一样?
答案 0 :(得分:3)
没有层次结构,每个异常都有自己的代码(除了您没有定义代码的用户定义的异常),可用于单独捕获异常。 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中有很多信息。