Exception 异常块中发生异常时会发生什么

Exception 异常块中发生异常时会发生什么,exception,plsql,Exception,Plsql,假设在我的过程中,发生了错误,并转到异常块。 在为发生的错误输入日志时,另一个错误发生在异常块本身中 然后会发生什么 找到答案最简单的方法就是尝试一下 declare dummy integer; begin select 99 into dummy from all_objects; -- Will raise TOO_MANY_ROWS exception when too_many_rows then select 77 into dummy from du

假设在我的过程中,发生了错误,并转到异常块。 在为发生的错误输入日志时,另一个错误发生在异常块本身中


然后会发生什么

找到答案最简单的方法就是尝试一下

declare
   dummy integer;
begin
   select 99 into dummy from all_objects; -- Will raise TOO_MANY_ROWS
exception 
   when too_many_rows then
      select 77 into dummy from dual where 2=3; -- Will raise NO_DATA_FOUND
end;    
/
当您跑步时,您将获得:

ORA-01403: no data found
ORA-06512: at line 8

如果您可以添加一些代码片段,以便我们更好地理解您的问题,那就更好了。与往常一样,异常将被抛出给该func/proc的调用方,或者您的程序将在异常情况下完成。明白了,谢谢。。!!!仍然意味着它将执行异常并在异常块中引发错误异常。。。但是主块中的错误没有任何原因…跳过了太多的行,我们将无法跟踪主块中发生的事情。。。你能帮我吗。。。或者我们可以使用PRAGMA自治事务来实现……我不这么认为。如果您捕获到第一个异常,那么就由您来记录它或引发它或其他什么。如果您尝试对其进行日志记录,但日志记录代码失败,则表明您丢失了原始异常。但是为什么日志记录会失败呢?需要使它健壮!PRAGMA自治事务将与“PRAGMA在此处创建无法跟踪的bug”相同。您既不会得到原始错误,也不会得到第二个错误。