ORACLE xmlagg限制

时间:2014-05-08 15:48:40

标签: oracle xml-parsing

我有一个表,其中有多行文本需要合并为一行。我需要支持超过4000个字符的字符串,因此listagg不是一个选项。

经过多次搜索,我完成了以下工作:

select mdesc.DEFINITION_ID,
        xmlagg(xmlelement(E,mdesc.record_desc||' ')).EXTRACT('//text()')
        FROM METRIC_DESC mdesc
        GROUP BY DEFINITION_ID

但我的结果会在某些字符转义时返回。

这个SO线程有一些建议

How to tweak LISTAGG to support more than 4000 character in select query?

但是出于我的目的,我无法转换为CLOB。

知道如何以可用的格式获取查询结果吗? (即不是CLOB而没有逃脱?)

2 个答案:

答案 0 :(得分:0)

要将XMLType对象转换为CLOB,您将需要添加一个getClobVal()函数。

答案 1 :(得分:0)

尝试使用rtrim函数:

SELECT mdesc.definition_id, 
       Rtrim(Xmlagg(Xmlelement(e, mdesc.record_desc 
                                  || ' ')).EXTRACT('//text()'), ',') 
FROM   metric_desc mdesc 
GROUP  BY definition_id ;