1.listagg
LISTAGG (measure_expr:any [, delimiter_expr:VARCHAR]) WITHIN GROUP (ORDER BY column_expr ASC/DESC)
语法注解
LISTAGG函数一般配合GROUP BY作为聚合函数(也可用于开窗函数)使用,可以传入两个参数变量
measure_expr: 要合并处理的字段
delimiter_expr: 给定分隔符号
column_expr: 排序字段
举例:
-- 根据user_tab_cols按column_id拼接某个表的字段
SELECT
listagg(column_name, ',') WITHIN GROUP (ORDER BY column_id)
FROM
user_tab_cols
WHERE
table_name = 'USER';
2.wm_concat
wm_concat语法比较简单,直接在括号里面写入要接着的字段就行了,在oracle11g以后,oracle官方引入了listagg函数取代wm_conat函数,listagg可以指定分隔符,指定排序
举例:
SELECT
wm_concat(column_name)
FROM
user_tab_cols
WHERE
table_name = 'USER';
3 xmlagg
数据量超出4000时,用listagg或wm_concat会报错,可以使用xmlagg,语法如下:
xmlagg(xmlparse(content 合并字段||’,’ wellformed) order by 排序字段).getclobval()
拼接出来的语句,最后会多一个“,”,可以使用substr截取字符串和length计算字符长度配合使用
举例:
select substr(xmlagg(xmlparse(content SECTION_NO || ',' wellformed) order by SPS_ID)
.getclobval(),
0,
length(xmlagg(xmlparse(content SECTION_NO || ',' wellformed) order by SPS_ID)
.getclobval()) - 1) SECTION_NO
from REAL_PROJ_SECTION
标签:listagg,column,expr,wm,oracle,xmlagg,concat
From: https://www.cnblogs.com/fuguanghe/p/18131524