Oracle字符串拼接函數(wm_concat、listagg、xmlagg)踩過的坑

標題中的三個函數均爲oracle數據庫中的字符串拼接函數,作用是將查詢的某個字段所有的值以指定符號拼接起來。有一張表如下:


id Value
1 $1600
2 $12
3 $1
4 $1

1、wm_concat

使用方法:

wm_concat(id);

達到的效果:1,2,3,4
弊端:有長度限制或者版本不支持。此函數慎用,在Oracle12G中不支持此函數,如果遇到項目的數據庫版本升級,會報出標識符無效的錯。

2、listagg

使用方法:

listagg(id, ',')within group(order by id) as id;

達到的效果:1,2,3,4
弊端:有長度限制,拼接的字符串超過4000時會報錯。

3、xmlagg

使用方法:

xmlagg(xmlparse(content id||',' wellformed) order by id).getclobval() as roleId;

達到的效果:1,2,3,4,
弊端:末尾會多處一個“,”。
所以,可以結合rtrim函數一起使用,去掉末尾多餘的“,”,修改後如下:

rtrim(xmlagg(xmlparse(content id||',' wellformed) order by id).getclobval(), ',') as id
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章