【发布时间】:2017-07-18 17:29:11
【问题描述】:
我在PL/SQL 中有几个嵌套块,如果发生错误,我只想在最顶层处理错误,方法是在每个嵌套级别的途中重新抛出错误。每当我在内部块中重新抛出 (RAISE) 异常时,DBMS_UTILITY.FORMAT_ERROR_BACKTRACE 会将堆栈重置到最后引发异常的点(这是通往顶层的嵌套块之一)。我找不到从异常最初发生的地方获取完整堆栈跟踪的方法。除了在重新抛出中间块之前记录之外,任何想法如何获得完整的堆栈跟踪?
【问题讨论】:
-
捕获并重新抛出异常会将错误堆栈重置到再次引发的位置。你为什么要首先屏蔽异常,如果异常没有在内部块中处理,它将自动传播到下一级/外部块,直到具有正确错误和它起源的行的顶层。
-
中间块记录异常。
-
为什么,如果您不处理中间块中的错误以捕获它并重新引发它,那又有什么意义呢。异常会自动通过中间块传播到可以处理的顶层。
-
没有必要通过中间块显式地重新提升它,因为它会自动/隐式地“重新提升”到顶层块。
-
我知道传播,再次需要捕获异常并记录每个中间块。