Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 从Oracle查询生成XML文件_Sql_Xml_Oracle_Performance - Fatal编程技术网

Sql 从Oracle查询生成XML文件

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万行的查询。我想为每一行生成XML文件(文件最大大小为100k)。我当然知道这些标签,但我不知道如何以最有效的方式编写。有什么帮助吗


谢谢

我不建议尝试将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;