Oracle XML具有大型数据集

时间:2013-08-24 18:35:59

标签: sql xml oracle format size

我在使用像

这样的Oracle XML函数时遇到了问题

xmlelementxmlaggxmlattributes

例如:

select 
 XMLELEMENT(
 "OrdrList",
      XMLAGG(
        XMLELEMENT(
        "IDs",
            XMLATTRIBUTES(
            USERCODE AS "usrCode",
            VALDATE AS "validityDate"
            )
        )
     )   
 ) from TMP
/

代码似乎是正确的,因为它在返回少量消息时起作用

是的,我确实尝试设置“long”,“pagesize”,“linesize”等......但是从来没有能够检索到大约的全套。 500.000条XML消息(即表格行)。

阅读一些背景资料(例如JürgenSieben的“Oracle SQL”),似乎这些函数不适用于大型数据集。 Sieben先生解释说,他仅将这些用于小型查询(最大1 MB输出大小),高于他建议使用“面向对象的函数”但不解释哪些。

有人有这方面的经验并且上述XML功能是否正常工作或者知道替代方案?


根据以下建议:通过[...] .getclobval(0, 2) from TMP转换为CLOB现在遍历整个表格。 慢,但完整。


我必须进行更正getclobval提供更长但仍未完整的列表。 由于我对上述Oracle XML函数的实现/文档质量的信心很弱,我将从数据库创建标准文件输出并自己实现XML转换。


新的更新:我找到了罪魁祸首:XMLAGG如果我把它拿出来,数据库会快速,正确,逐步和完全解析。奇怪的是,因为XMLAGG并没有真正复杂的工作:创建一个进入和传出的XML标签

1 个答案:

答案 0 :(得分:1)

我认为完全在sqlplus + spool中显示这些数据将会很困难。

我已将这些功能用于> 100Mb的数据没有问题,但我已经将转换后的XMLType写入转换为CLOB后的文件,使用UTL_FILE用于服务器端或在Java / C#中的客户端应用程序。

如果你坚持使用sqlplus,你是否尝试过“SET TERM OFF”和假脱机?它可能会提供更好的结果,肯定会更快。注意使用SET TERM OFF你必须小心如何调用sqlplus; sqlplus @script可以工作,但是“cat<