暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle 只有在存储过程竞争后, DBMS_OUTPUT.PUT_Line才打印。

askTom 2016-02-04
143

问题描述

我有一个存储过程,收集大约4-5百万条记录的信息(每月一次)。
我使用的方法如下。

创建或替换过程月报表(报表日期)为
v_start_date日期;
v_end_date日期;
C_限制PLS_INTEGER := 100000 ;
类型每月记录为记录
(
--在此处声明列。
);
类型为每月记录的表;
v_tab_月_记录选项卡_月_记录;
i编号;
INDX编号;
游标示例_cursor ( start_date date, end_date date )为
选择C1、C2、C3
t1、t2、t3、t4
在哪里
date_of_记录> start_date和date_of_记录< end_date
--以及这里所有的连接条件


开始
dbms_output.put_line('Monthly Report Execution starts');
--计算start_date和end_date的逻辑
i := 0;
open example_cursor(v_start_date,v_end_Date);
循环
i:=i+1;
DBMS_OUTPUT.PUT_LINE('Loop no:'||I);

FETCH示例_cursor
批量收集到v_tab_月_记录
LIMIT C_LIMIT;
EXIT WHEN v_tab_month_rec.COUNT = 0;

对于1中的所有索引。V_TAB_MORT_LOANS.计数
--DML语句此处
END 循环;
COMMIT;
end monthly_report;

上述程序按预期需要大约1小时才能完成。
但问题是, dbms_reput_line消息仅在存储过程完成后才会出现。我的意思是,我得到所有的输出在1小时后。是否有任何方法可以查看存储过程完成了多少,或者更确切地说, dbms_t.put_line消息在执行时立即获得。

专家解答

DBMS_t.put_line将字符串放置在缓冲区中。只有当控件返回到客户端时,才会显示这些控件。即该过程结束:

The output cannot be retrieved until the PL/SQL program unit from which it was buffered returns to its caller.


http://docs.oracle.com/database/121/ARPLS/d_output.htm#ARPLS67327

将进度记录到表的更好方法。开源实用工具记录器很适合这样做:

https://github.com/OraOpenSource/Logger
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论