oracle中xmlagg、listagg、wm_concat用法
xmlagg、listagg、wm_concat三个函数在oracle中都可以用于列转换行。查询例子:将fileorgname字段用,分隔的数据,实现列转行sql select t.fileorgname, t.typepath3 from t_imgfileindex t一、xmlagg效果和wm_concat一样,但是性能不一样,xmlagg排序一下,性能会快一些。--语法:1. xmlagg
·
xmlagg、listagg、wm_concat三个函数在oracle中都可以用于列转换行。
查询例子:
将fileorgname字段用,分隔的数据,实现列转行sql select t.fileorgname, t.typepath3 from t_imgfileindex t
一、xmlagg
效果和wm_concat一样,但是性能不一样,xmlagg排序一下,性能会快一些。
--语法:
1. xmlagg(xmlparse(content 合并字段 ||’,’ wellformed) order by 排序字段).getclobval()
例子:
select xmlagg(xmlparse(content t.fileorgname || ',' wellformed) order by t.typepath3)
.getclobval() as fileorgname,
t.typepath3
from t_imgfileindex t
group by t.typepath3;

--语法:
2. xmlagg(xmlelement(e, 合并字段, ',').extract('//text()')).getclobval()
例子:
select xmlagg(xmlelement(e, t.fileorgname, ',').extract('//text()'))
.getclobval() as fileorgname,
t.typepath3
from t_imgfileindex t
group by t.typepath3;

二、listagg
11g2才提供的函数,不支持distinct,拼接长度不能大于4000,函数返回为varchar2类型,最大长度为4000。当查询较慢时,建议使用listagg代替wm_concat。
--语法:
listagg( 合并字段, ',') within group (order by 排序字段 )
例子:
select listagg(t.fileorgname, ',') within group(order by t.typepath3) as fileorgname,
t.typepath3
from t_imgfileindex t
group by t.typepath3;

三、wm_concat
wm_concat依赖WMSYS 用户,不同oracle环境时可能用不了,会有版本不兼容问题,返回类型为CLOB,可用substr截取长度后to_char转化为字符类型。
--语法:
wm_concat()
例子:
select wm_concat(distinct t.fileorgname),
t.typepath3
from t_imgfileindex t;

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)