添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

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'

2.2 用listagg函数查询之后的结果

select listagg(emp_uid,',') within group (order by emp_uid) as emp_uid
  from PRS_CALC_DATA where agency_code='101002' and prtype_code='002'

2.3 用 xmlagg 函数查询之后的结果

3. 应用示例

给100个人计算工资,计算的后台接口统计的是工资编制表中每个人员对应的id值,故需要将该id值查询出来传给计算接口。实现如下:

3.1 查询语句

3.2 提取查询结果

3.3 传入查询结果

3.4 查看结果

*****************************************************************************************************************************************************************************************************************

如果不使用listagg函数,会只计算一个人的工资(因为只传入了一个id值)。示例如下:

*****************************************************************************************************************************************************************************************************************

****************************************************************************************************************************************************************************************************

上述过程只是一个演示,实际性能测试,如果可以从系统的后端接口提取ID,则应该提取,而不是从数据库直接查询(不能体现系统性能,结果会优于实际性能),简要如下:
*****************************************************************************************************************************************************************************************************