我使用 Aqua Data Studio 通过分散输出语句来调试存储过程。
我在包中有一个违反完整性约束的删除语句:
DELETE FROM x WHERE x.ID = an_x_with_children;
正如预期的那样,我的 proc 在这一行出现 ORA-02292 失败。我想查看an_x_with_children
变量的值。所以我用这样的输出换行:
dbms_output.put('Attempting to delete x: ' || an_x_with_children);
DELETE FROM x WHERE x.ID = an_x_with_children;
dbms_output.put(' Success');
并期望在违反完整性约束错误消息之前将消息视为消息控制台中的最后一件事。 但它不打印!
现在,如果我更改输出以使用如下put_line()
过程:
dbms_output.put_line('Attempting to delete x: ' || an_x_with_children);
DELETE FROM x WHERE x.ID = an_x_with_children;
dbms_output.put_line(' Success');
我在 proc 出错之前立即看到消息“尝试删除 x:123”。
包的文档dbms_output
没有提到put
和put_line
过程在这方面的行为有任何不同。例如,它说
您使用 PUT 或 PUT_LINE 创建的输出被缓冲。
因此,我希望在 proc 错误时两者都显示输出,或者都不显示输出。
有人可以向我解释这种行为是怎么回事吗?