dbms_output不实时输出的问题

又是违规昵称 2008-10-30 01:10:04
我一有个存储过程,执行非常慢,调试一次往往要等两个多小时
每次执行sql developer的输出界面都是假死状态

为了了解此存储过程执行的进度, 我在存储过程中放置了这样的语句:


IF (MOD(CUR_PEPL%ROWCOUNT, 1000) = 0) THEN

DBMS_OUTPUT.PUT_LINE(CUR_PEPL%ROWCOUNT ||' RECORDS HAS BEEN PROCESSED AT ' || TO_CHAR(SYSDATE,'MM/DD/YYYY HH:MI:SS') || ', CONTINUE...');

END IF;


即每1000行处理完成打印提示信息.

但是让我失望的是, 实际执行的过程中, sql控制台并不打印输出信息,
一旦整个过程执行完毕了,sql控制台会在五秒之内突然把所有的dbms_output信息全部打出来

这样, 我对执行进度的跟踪就失效了.

哪位大哥处理过类似的问题给个方案, 谢谢了!




...全文
1003 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
sten 2008-10-30
  • 打赏
  • 举报
回复
估计写日志方式比较好了
又是违规昵称 2008-10-30
  • 打赏
  • 举报
回复
是的, 我也测过了, 不可以

只能写表写日志, 自治事务可以用得上


谢谢大家
sten 2008-10-30
  • 打赏
  • 举报
回复
刚刚又测了下,dbms_output似乎不可以做到实时输入的要求,还是想办法写表吧.
flg_inwind 2008-10-30
  • 打赏
  • 举报
回复
dbms_output是不能实时输出的。
如果想实时输出可以通过写表或者写日志的方式进行。
codearts 2008-10-30
  • 打赏
  • 举报
回复
看来只好用 autonomous_transaction 往表里写数据了
又是违规昵称 2008-10-30
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 jin_ok 的回复:]
写一个日志文件,把你的时间写进去,这样能看到各个部分执行了多长时间
[/Quote]

oracle里面写文件的那个包要是非独占模式的,
倒是可以试试, 就是麻烦了点.

有没有办法直接让dbms_output实时输出哦?

jin_ok 2008-10-30
  • 打赏
  • 举报
回复
写一个日志文件,把你的时间写进去,这样能看到各个部分执行了多长时间
又是违规昵称 2008-10-30
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 sten 的回复:]
通常loop次数少的情况下我都是单步执行,
过大的次数,我是把需要的信息写到表里来定位的.
[/Quote]

写到表里面是个办法,
但是我的存储过程, 因为事务控制的原因, 只能最后完成了一次提交
所以即使写到表里去了, 我另开一个会话, 也看不到提交前的结果啊
又是违规昵称 2008-10-30
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 hebo2005 的回复:]
你可以单步执行试试,或者设置断点
我用TOAD就可以实现这个功能
[/Quote]

我不单步,一次执行下来就得两个多小时,
单步执行, 就算按着ctrl+N不放, 一天也不定能执行完啊
sten 2008-10-30
  • 打赏
  • 举报
回复
通常loop次数少的情况下我都是单步执行,
过大的次数,我是把需要的信息写到表里来定位的.
hebo2005 2008-10-30
  • 打赏
  • 举报
回复
你可以单步执行试试,或者设置断点
我用TOAD就可以实现这个功能
YY_MM_DD 2008-10-30
  • 打赏
  • 举报
回复
关注。。。。

17,086

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧