Oracle 在一次迭代后立即将内容写入UTL_文件
我有PL/SQL块,它从一个表函数中查询,我使用游标逐个记录处理它,有一些业务逻辑,最后将符合条件的记录写入文件 要处理的记录数高达100万条。总的处理速度大约为每分钟10000条记录(在使用少量数据块进行测试后) 现在,我需要指出不同环境中的处理状态,JSPOracle 在一次迭代后立即将内容写入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
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文件的更多信息