【问题标题】:How to print sqlplus output immediate如何立即打印sqlplus输出
【发布时间】: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 多个客户端会方式太慢了。

标签: oracle plsql sqlplus


【解决方案1】:

没办法,你不能。它在 PL/SQL 过程完成时显示。

如果你想创建一个实时日志

  • 创建表
  • 一个序列
  • 一个自治事务过程,它将
    • 在该表中插入一行
    • 使用序列(以便您知道如何对行进行排序)
    • 可能是时间戳(以便您知道某个步骤花费了多长时间)
    • 提交(不会影响主事务,因为 - 请记住 - 过程是一个自治事务)

然后将对 logging 过程的调用放入您长期运行的 PL/SQL 过程中,运行它,让它工作。在另一个会话中,查询日志表以查看进度。

【讨论】:

    猜你喜欢
    • 2017-02-16
    • 2019-11-30
    • 1970-01-01
    • 2010-09-25
    • 2010-11-01
    • 1970-01-01
    • 2013-12-27
    • 1970-01-01
    • 2016-11-09
    相关资源
    最近更新 更多