2017-07-18 63 views
1

我在PL/SQL和错误的事件有几个嵌套块我只想在通过重新最顶层处理错误在每个嵌套级别抛出它。每当我重新抛出(RAISE)异常在内部块的问题,DBMS_UTILITY.FORMAT_ERROR_BACKTRACE复位堆到的点,其中的例外是最后升高(这是在途中对顶层嵌套块中的一个)。我无法找到从最初发生异常的地方开始完整堆栈跟踪的方式。任何想法如何获得完整的堆栈跟踪,除了重新投入中间块之前的日志记录?获得在PL/SQL重新抛出异常完整的堆栈跟踪(从点异常起源)

+0

捕获并重新抛出异常复位错误堆栈到这一点,在那里再次上调。为什么要首先屏蔽异常,如果异常未在内部块中处理,它将自动传播到下一级/外部块,直到最高级别,并具有正确的错误和产生的线。 – ivanzg

+0

记录中间块中的异常。 – fg78nc

+1

再次说明,为什么如果您不处理中间块中的错误来捕捉它并重新提升它,那又有什么意义呢?异常会通过中间块自动传播,直至可以处理的最高级别。 – ivanzg

回答

1

我看到你正在尝试做的,和我一起ivanzg,这是没有必要同意 - 在顶级处理器可以向下回溯整个所谓的烟囱的程序和错误的路线。

raise语句是你在做什么杀手。只要你这样做,你就失去了真正的错误地点。

0

实际上,要获得完整的调用堆栈,请使用DBMS_UTILITY.FORMAT_CALL_STACK()和DBMS_UTILITY.FORMAT_ERROR_BACKTRACE()的组合。 FORMAT_CALL_STACK将向顶层调用显示错误处理程序,并且FORMAT_ERROR_BACKTRACE将从错误处理程序直至错误过程和代码行(准确地)显示。

与FORMAT_CALL_STACK唯一的缺点是,行号不一定是你所期望的 - 他们指出你的错误处理程序。

相关问题