簡體   English   中英

從 Oracle 查詢生成 XML 文件

[英]Generate XML files from Oracle query

我有一個返回 5000 萬行的查詢。 我想為每一行生成 XML 文件(文件最大大小為 100k)。 我當然知道標簽,但我不知道如何以最有效的方式編寫它。 有什么幫助嗎?

謝謝

我不建議嘗試將 50M 文件寫入磁盤,但是您可以使用以下代碼來演示為什么這不是一個好主意

1:使用目錄將文件寫入磁盤的 function

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;
/

2:使用上述 function 的查詢創建包含所有行的表的語句 - 建議您保持較小的行數以查看其運行方式

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; 

3:刪除表以重復創建具有更多行的表語句

drop table tmptbl purge; 

我在 10 秒內完成了 10k 個文件 - 1M 文件需要 1000 秒,50M 文件需要 50000 秒(即不到 14 小時)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM