请问各位大虾,如何在oracle存储过程或者pl/sql程序段中使用spool的时候,随时能输出信息?环境是shell。目前的代码如下:
  sqlplus -s $DBLOGIN<<EOF
  SET HEADING OFF
  SET PAGESIZE 0
  SET FEEDBACK OFF
  SET FLUSH ON
  SET VERIFY OFF
  SET ECHO ON
  SET TERMOUT ON
  set serveroutput on
  spool $MYPATH/log/spool.log;
declare
  ……
begin
  ……
  loop
    ……
    dbms_output.put_line('xxx record done.');
    ……
  end loop;
  ……
end;
/
spool off;
exit;
EOF
    目前的代码运行效果是:执行此程序段需要10分钟,那么这段时间内所有需要输出的信息必须等到执行完毕才能输出到log中。而我希望能在程序执行中随时输出或者控制每隔一定数量输出信息到log文件中(可能是把buffer中的信息强制刷新到文件中)。请问有什么解决办法?谢谢!

解决方案 »

  1.   

      sqlplus -s $DBLOGIN<<EOF >>sql.log
      SET HEADING OFF
      SET PAGESIZE 0
      SET FEEDBACK OFF
      SET FLUSH ON
      SET VERIFY OFF
      SET ECHO ON
      SET TERMOUT ON
      set serveroutput on
      spool $MYPATH/log/spool.log;
    declare
      ……
    begin
      ……
      loop
        ……
        dbms_output.put_line('xxx record done.');
        ……
      end loop;
      ……
    end;
    /
    spool off;
    exit;
    EOF
    然后直接监控sql.log 
    tail -f sql.log
      

  2.   

    后来还是使用utl_file写文件实现的。spool是sqlplus的命令,不适用于pl sql程序段或存储过程内。