为什么 PLSQL 中的代码在“异常”部分之后没有执行?

问题描述

所以我犯了一个错误,我没有将立即执行放在嵌套的开始结束块中,所以我的代码不起作用。所以基本上我有

begin
 execute immediate 'select * from sales';
 exception when others then null;
 dbms_output.put_line(123);
end;

Dbms_output 没有打印“123”,我发现我需要在开始结束时立即执行。我想确定,所以我的问题是为什么即使没有引发异常,代码也不在异常部分之后执行

解决方法

为什么即使没有引发异常,代码也不在异常部分之后执行?

原因很简单——问题中的dbms_output.put_line不在“after exception part”中。

正确缩进的代码相当于:

begin
    execute immediate 'select * from dual';
exception when others then 
    null;
    dbms_output.put_line(123);
end;
/

异常块是 EXCEPTIONSEND; 之间的所有内容,如果发生异常就会被执行。