【发布时间】:2020-11-02 17:12:59
【问题描述】:
我有非常简单的 pl\sql 代码。
在这段代码中,我正在打印循环的索引,并在每次打印前等待 1 秒。
我的问题是我希望在调用和打印 dbms_output.put_line 过程时将此输出用作实时日志 - 我想立即查看输出。
在当前代码中 - 只有在完成后(5 秒..),它才会一次性打印所有输出...
set serveroutput on
set echo on
begin
for i in 1..5
loop
dba_maint.pkg_utils.sp_sleep(1);
dbms_output.put_line(i);
end loop;
end;
/
【问题讨论】:
-
@Littlefoot 是正确的;只有在过程完成后才会显示您的 dbms_ouput。这样做的原因是,通过数据库管理器的过程实际上并没有产生显示的输出。数据库管理器实际上只是写入一个内部内存缓冲区。一旦该过程完成,您的客户端进程(SQLplus、IDE 等)就会读取该缓冲区,并且该进程会创建您显示的输出。直接输出到 100 多个客户端会方式太慢了。