CLAGG for CLOB?

时间:2016-03-09 09:34:20

标签: database oracle function string-concatenation clob

是否有一些函数在oracle中使SYS.STRAGG具有相同的行为,但它不是返回VARCHAR(并且仅限于VARCHAR大小),而是返回一个CLOB,从而允许(几乎)无限数量的连接字符串?

例如,我有一个查询select x from y where z,返回2.5M记录,我想将所有这些记录连接在一起1个镜头

1 个答案:

答案 0 :(得分:1)

XML函数可用于此类聚合,但对于2.5M记录,它将非常慢。

示例:

SELECT
    rtrim(
        dbms_xmlgen.convert(
            extract(
                xmlroot(
                    xmlelement(
                        "x",
                        xmlagg(sys_xmlgen(object_name || ', '))
                    ),
                version '1.0'),
            '/x/ROW/text()').getclobval(),
        1),
    ', ') aggregated_data
FROM
    all_objects

您可以考虑使用LISTAGG将小行组预聚合为小于4000/32767字节的VARCHAR,然后使用XML聚合作为最终结果。