Oracle数据库聚合函数XMLAGG详解(全网最全) |
一、基本介绍
二、语法和参数XMLAGG函数的语法如下: XMLAGG(XMLELEMENT(name, ...)) XMLELEMENT是一个指定XML元素的函数 。该函数需要提供以下两个参数:
XMLAGG函数会将所有XML元素的结果以顺序的方式连接成一个XML文档,从而返回一个XML类型的值 。 三、使用方法3.1、拼接字符串XMLAGG函数可以将多行数据中的指定列拼接成一个字符串 。 SELECT XMLAGG(
XMLELEMENT(
e,
ename || ','
) ORDER BY ename
).EXTRACT('//text()')
AS names
FROM scott.emp;
执行结果:
以上代码实现按照 scott.emp 表中 ename字段排序,将多个ename 拼接成一个字符串,以逗号分隔 。 3.2、构建XML文档XMLAGG函数可以根据需要自定义XML文档的结构 。 例如下列的SQL: SELECT XMLAGG(
XMLELEMENT(
"employees",
XMLATTRIBUTES(empno AS "empno"),
XMLELEMENT("ename", ename),
XMLELEMENT("job", job),
XMLELEMENT("hiredate", hiredate)
)
) AS "employees"
FROM scott.emp;
查询结果:
用notepad++的XMLTools插件美化如下:
可以看到生成了xml格式的文本内容 。 以上代码使用XMLAGG函数将多行数据中的empno、ename、job、hiredate字段拼接成一个employees元素,生成一个XML文档 。 四、相关注意点4.1、排序
SELECT XMLAGG(
XMLELEMENT(
e,
ename
) ORDER BY ename
)
AS names
FROM scott.emp;
4.2、处理NULL值
SELECT XMLAGG(
XMLELEMENT(
e,
COALESCE(ename, 'N/A')
)
)
AS ename
FROM scott.emp;
以上代码将空值替换成“N/A”,避免了空值引起的错误 。 4.3、结尾字符的删除
SELECT TRIM(BOTH ',' from
XMLAGG(
XMLELEMENT(
e,
ename || ','
) ORDER BY ename
).EXTRACT('//text()')
)
AS names
FROM scott.emp;
执行结果:
以上代码先使用XMLAGG函数拼接字符串,再使用EXTRACT函数提取文档中的文本内容 。然后使用TRIM函数对其进行逗号的删除操作 。 附:Oracle XMLAGG去重CREATE TABLE AGGTEST(NAME VARCHAR2(10),TYP VARCHAR2(10));
SELECT T.* FROM AGGTEST T;
NAME TYP
alley GCGC
jacky GCGC
pr ICGC
candy GCGC
dc ICGC
alley GCGC
SELECT XMLAGG(XMLPARSE( CONTENT T.NAME||';' WELLFORMED) ORDER BY T.TYP).GETCLOBVAL() AS NAME_ALL,T.TYP
FROM (SELECT NAME,TYP,ROW_NUMBER() OVER(PARTITION BY TYP,NAME ORDER BY NAME) AS SEQ
FROM AGGTEST T1
)T
WHERE SEQ = 1
GROUP BY T.TYP;
NAME_ALL TYP
alley;jacky;candy; GCGC
dc;pr; ICGC
SELECT XMLAGG(XMLELEMENT(E,T.NAME,';').EXTRACT('//text()')).GETCLOBVAL() AS NAME_ALL,T.TYP
FROM AGGTEST T
GROUP BY T.TYP;总结
到此这篇关于Oracle数据库聚合函数XMLAGG详解的文章就介绍到这了,更多相关Oracle聚合函数XMLAGG内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持! |