是否有一些函数在oracle中使SYS.STRAGG具有相同的行为,但它不是返回VARCHAR(并且仅限于VARCHAR大小),而是返回一个CLOB,从而允许(几乎)无限数量的连接字符串?
例如,我有一个查询select x from y where z
,返回2.5M记录,我想将所有这些记录连接在一起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聚合作为最终结果。