我在使用像
这样的Oracle XML函数时遇到了问题 xmlelement
,xmlagg
,xmlattributes
例如:
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标签
答案 0 :(得分:1)
我认为完全在sqlplus + spool中显示这些数据将会很困难。
我已将这些功能用于> 100Mb的数据没有问题,但我已经将转换后的XMLType写入转换为CLOB后的文件,使用UTL_FILE用于服务器端或在Java / C#中的客户端应用程序。
如果你坚持使用sqlplus,你是否尝试过“SET TERM OFF”和假脱机?它可能会提供更好的结果,肯定会更快。注意使用SET TERM OFF你必须小心如何调用sqlplus; sqlplus @script可以工作,但是“cat<