Oracle查询,将某列查询结果用逗号隔开,拼接成一行(listagg函数、xmlagg函数)...

本文介绍如何在Oracle数据库中使用listagg和xmlagg函数将多条记录汇总为单一字符串的方法。这两种函数均可实现字段值的拼接,但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的数据长度。

2. 示例对比:

2.1 原始查询结果

select emp_uid from PRS_CALC_DATA where agency_code='101002' and prtype_code='002'

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值