Oracle查询,将某列查询结果用逗号隔开,拼接成一行(listagg函数、xmlagg函数)
需求:Oracle数据库,通过查询,将查询字段的该列结果用逗号拼接成一行。
1. 查询语法
1.1 listagg函数
select listagg(查询拼接字段,',') within group (order by 排序字段) as 查询显示字段 from 表名 where 条件
1.2 xmlagg函数
select xmlagg(xmlparse(content 查询拼接字段 || ','wellformed) order by 排序字段).getclobval() as 查询显示字段
from 表名 where 条件
区别:
listagg函数:返回结果为varchar2格式的数据,即拼接后的字符串最大可以保存4000字节的数据,所以大于这个数据的字符串就会报ORA-01489 字符串连接的结果过长的错误。
xmlagg函数:当查询结果过长,拼接的字符串长度过长大于4000字节,我们可以使用这个函数,函数返回结果为CLOB类型,大对象数据类型最大可以存储4GB的数据长度。