Oracle 在一次迭代后立即将内容写入UTL_文件

Oracle 在一次迭代后立即将内容写入UTL_文件,oracle,plsql,utl-file,Oracle,Plsql,Utl File,我有PL/SQL块,它从一个表函数中查询,我使用游标逐个记录处理它,有一些业务逻辑,最后将符合条件的记录写入文件 要处理的记录数高达100万条。总的处理速度大约为每分钟10000条记录(在使用少量数据块进行测试后) 现在,我需要指出不同环境中的处理状态,JSP DECLARE vSFile utl_file.file_type; vNewLine VARCHAR2(200); my_cursor IS SELECT * FROM MYTABLE; my_details my_curs

我有PL/SQL块,它从一个表函数中查询,我使用游标逐个记录处理它,有一些业务逻辑,最后将符合条件的记录写入文件

要处理的记录数高达100万条。总的处理速度大约为每分钟10000条记录(在使用少量数据块进行测试后)

现在,我需要指出不同环境中的处理状态,JSP

DECLARE
 vSFile   utl_file.file_type;
 vNewLine VARCHAR2(200);
 my_cursor IS SELECT * FROM MYTABLE;
 my_details my_cursor%rowtype;
BEGIN
  vSFile := utl_file.fopen('ORALOAD', file_name,'r');

  IF utl_file.is_open(vSFile) THEN
        utl_file.get_line(vSFile, vNewLine);


        OPEN my_cursor;
        LOOP
               FETCH my_cursor INTO my_details;
               EXIT WHEN sll_cur%NOTFOUND;
               -- Do processing
               utl_file.putf(logfile,'%s ',my_details);
               -- A info tht record completed!
        END LOOP;
        CLOSE logfile;
        CLOSE my_cursor;
  END IF;
EXCEPTION
WHEN OTHERS THEN
    --Error handling
END;
/
在流程完成之前,此处写入的日志信息不可用。所以,我无法追踪它完成了多远。
有人能在这方面帮助我吗?

要将数据写入文件,您应该使用FFLUSH过程。例如:

OPEN my_cursor;
   LOOP
      FETCH my_cursor INTO my_details;
      EXIT WHEN sll_cur%NOTFOUND;
      -- Do processing
      utl_file.putf(logfile,'%s ',my_details);
      -- Call the FFLUSH proc here..And contents are available immediately.
      utl_file.FFLUSH(logfile); 
END LOOP;
从文件中:

FFLUSH
将挂起的数据物理写入 文件句柄。通常,写入文件的数据是缓冲的。这个
FFLUSH
过程强制将缓冲数据写入文件。 数据必须以换行符结尾

当文件必须在打开时读取时,刷新非常有用。对于 例如,调试消息可以刷新到文件中,以便 可以立即阅读

中有关于
UTL\u文件的更多信息