標題中的三個函數均爲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