【问题标题】:Print progress in oracle在 oracle 中打印进度
【发布时间】:2021-08-26 07:47:09
【问题描述】:

我有一个“主”过程,它在循环中调用其他过程。我想显示消息,显示程序何时开始以及何时完成,如下所示:

DBMS_OUTPUT.PUT_LINE('LOOP 1 STARTED');
DBMS_OUTPUT.PUT_LINE('PROCEDURE 1 STARTED'); 
PROCEDURE_1(x, y);
DBMS_OUTPUT.PUT_LINE('PROCEDURE 1 COMPLETED');
DBMS_OUTPUT.PUT_LINE('PROCEDURE 2 STARTED');  
PROCEDURE_2(x, y); 
DBMS_OUTPUT.PUT_LINE('PROCEDURE 2 COMPLETED');  
                   .
                   .
                   .
DBMS_OUTPUT.PUT_LINE('LOOP 2 STARTED');

问题在于,这样做只会在所有程序完成后才会显示消息。有没有办法让这些消息“实时”显示?还有什么可以做的吗?

【问题讨论】:

    标签: oracle stored-procedures plsql


    【解决方案1】:

    dbms_output 只是写入内存缓冲区,在调用完成后客户端应用程序可以访问该缓冲区。所以客户端应用程序在执行完成之前无法显示输出。

    最简单的方法通常是使用自治事务将数据写入日志表,然后有一个单独的会话来查询日志表以显示进度。您可以使用dbms_mail 构建替代解决方案,因为这不是事务性的,或者utl_http 进行HTTP 调用以刷新具有当前状态的网页,或者使用dbms_alertdbms_aq 包将消息发送到其他组件在系统中。但这通常需要更多的管道来设置。

    【讨论】:

    • Oracle 没有内置的 PL/SQL 日志记录包,但最接近行业标准的是 Tyler Muth 的开源库logger,即available on GitHub
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-25
    • 1970-01-01
    • 1970-01-01
    • 2022-07-15
    • 2016-11-11
    • 2014-12-03
    相关资源
    最近更新 更多