问题描述
所以我犯了一个错误,我没有将立即执行放在嵌套的开始结束块中,所以我的代码不起作用。所以基本上我有
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;
/
异常块是 EXCEPTIONS
和 END;
之间的所有内容,如果发生异常就会被执行。