Sql 从Oracle查询生成XML文件
我有一个返回5000万行的查询。我想为每一行生成XML文件(文件最大大小为100k)。我当然知道这些标签,但我不知道如何以最有效的方式编写。有什么帮助吗Sql 从Oracle查询生成XML文件,sql,xml,oracle,performance,Sql,Xml,Oracle,Performance,我有一个返回5000万行的查询。我想为每一行生成XML文件(文件最大大小为100k)。我当然知道这些标签,但我不知道如何以最有效的方式编写。有什么帮助吗 谢谢我不建议尝试将5000万个文件写入磁盘,但这里有一些代码可以演示为什么这不是一个好主意 1:使用目录将文件写入磁盘的函数 create or replace function WRITETOFILE (dir in VARCHAR2,fn in VARCHAR2, dd IN clob) return clob AS ff UTL_FI
谢谢我不建议尝试将5000万个文件写入磁盘,但这里有一些代码可以演示为什么这不是一个好主意 1:使用目录将文件写入磁盘的函数
create or replace function WRITETOFILE (dir in VARCHAR2,fn in VARCHAR2, dd IN clob) return clob AS
ff UTL_FILE.FILE_TYPE;
l_amt number := 30000;
l_offset number := 1;
l_length number := nvl(dbms_lob.getlength(dd),0);
buf varchar2(30000);
begin
ff := UTL_FILE.FOPEN(dir,fn,'W',32760);
while ( l_offset < l_length ) loop
buf := dbms_lob.substr(dd,l_amt,l_offset);
utl_file.put(ff, buf);
utl_file.fflush(ff);
utl_file.new_line(ff);
l_offset := l_offset+length(buf);
end loop;
UTL_FILE.FCLOSE(ff);
return dd;
END WRITETOFILE;
/
我在10秒钟内完成了10k个文件,对于1M个文件,这将给1000秒,对于50M个文件,这将给50000秒(即不到14小时)。您想创建50M个文件吗?听起来有点奇怪。你到底想完成什么?也许还有其他解决办法。
create table tmptbl as
select writetofile('DMP_DIR','xyz-'||level||'.xml', xmlelement("x", level).getClobVal()) tmpcol, systimestamp added_at
from dual CONNECT BY LEVEL <= 10;
drop table tmptbl purge;