【发布时间】:2020-12-26 16:37:28
【问题描述】:
所以我犯了一个错误,我没有在嵌套的 begin-end 块中立即执行,所以我的代码不起作用。所以基本上我有
begin
execute immediate 'select * from sales';
exception when others then null;
dbms_output.put_line(123);
end;
Dbms_output 没有打印“123”,我发现我需要在 begin-end 中立即执行。我想确定,所以我的问题是为什么即使没有引发异常,代码也不会在异常部分之后执行?
【问题讨论】:
-
无法复制,因为抛出异常。 db<>fiddle
-
我目前在DataGrip工作,这是一张照片example@MT0
-
在运行 PL/SQL 匿名块之前尝试运行
SET SERVEROUTPUT ON;以显示控制台输出。 -
您的 dbms_output 是异常的一部分,它将在不执行任何操作的“null”部分之后执行。你有一个叫做销售的表吗?如果是,那么您的立即执行不会引发错误,因此 dbms_output 不会被执行。
-
@wemfried,不,如果没有 into 子句,它不会引发异常。注释 dbfiddle 中的异常行,然后尝试(将 sales 替换为 dual 后)
标签: oracle plsql plsqldeveloper oracle18c