我有一个表,其中有多行文本需要合并为一行。我需要支持超过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而没有逃脱?)
答案 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 ;