我一有个存储过程,执行非常慢,调试一次往往要等两个多小时
每次执行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信息全部打出来这样, 我对执行进度的跟踪就失效了.哪位大哥处理过类似的问题给个方案, 谢谢了!

解决方案 »

  1.   

    你可以单步执行试试,或者设置断点
    我用TOAD就可以实现这个功能
      

  2.   

    通常loop次数少的情况下我都是单步执行,
    过大的次数,我是把需要的信息写到表里来定位的.
      

  3.   


    我不单步,一次执行下来就得两个多小时,
    单步执行, 就算按着ctrl+N不放, 一天也不定能执行完啊
      

  4.   


    oracle里面写文件的那个包要是非独占模式的,
    倒是可以试试, 就是麻烦了点.有没有办法直接让dbms_output实时输出哦?
      

  5.   

    看来只好用 autonomous_transaction 往表里写数据了
      

  6.   

    dbms_output是不能实时输出的。
    如果想实时输出可以通过写表或者写日志的方式进行。
      

  7.   

    刚刚又测了下,dbms_output似乎不可以做到实时输入的要求,还是想办法写表吧.