2

我在使用 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ürgen Sieben 的“Oracle SQL”),似乎这些函数不是为大型数据集设计的。Sieben 先生解释说,他仅将这些用于小型查询(最大 1 MB 输出大小),在此之上他建议使用“面向对象的函数”,但没有解释哪个。

有人有这方面的经验,并且上述 XML 函数可以工作或知道替代方案吗?


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


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


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

4

1 回答 1

1

我认为在 sqlplus + spool 中完全显示这些数据将是一场斗争。

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

如果您被 sqlplus 卡住,您是否尝试过使用“SET TERM OFF”和假脱机?它可能会产生更好的结果,当然会更快。注意使用 SET TERM OFF 你必须小心你如何调用 sqlplus; sqlplus @script 可以工作,但是“cat <

于 2013-08-24T20:53:16.183 回答