Oracle (wm_concat,listagg ,xmlagg)的使用

1.wm_concat 返回类型 string

-- 此函数慎用,在Oracle12G中不支持此函数,如果遇到项目的数据库版本升级,会报出标识符无效的错。

/*  SELECT wm_concat(t.name)

  INTO v_wm_concat_str

  FROM nbw.czh_test t

GROUP BY t.id1

HAVING t.id1 < 3;

dbms_output.put_line(v_wm_concat_str);*/

2.listagg 返回类型 string

--有长度限制,拼接的字符串超过4000时会报错。

SELECT listagg(t.name, ',') within GROUP(ORDER BY 1)

  FROM nbw.czh_test t

WHERE t.id1 < 3

--GROUP BY t.id1; 分组拼接


图1

3.xmlagg  返回类型clob

3.1 存在问题 结尾保留逗号

  SELECT xmlagg(xmlparse(content t.name || ',' wellformed) ORDER BY 1).getclobval() t_name

          FROM nbw.czh_test t

        WHERE t.id1 < 3

        --group by t.id1;--分组拼接


图2

3.2 结合rtrim函数一起使用,去掉末尾多余的“,”

  SELECT rtrim(xmlagg(xmlparse(content t.name || ',' wellformed) ORDER BY 1).getclobval(),',') t_name

          FROM nbw.czh_test t

        WHERE t.id1 < 3

        --group by t.id1;--分组拼接


图3

你可能感兴趣的:(Oracle (wm_concat,listagg ,xmlagg)的使用)