VastbaseG100

基于openGauss内核开发的企业级关系型数据库。

Menu

XMLAGG

功能描述

XMLAGG函数是一个用于聚合XML数据的函数。它将多个XML片段组合成一个单一的XML文档。

Vastbase在Oracle兼容模式下,该函数支持getclobval()方法,用于将xml类型转换为clob类型,且是尾调用形式。

尾调用:仅支持在xmlagg函数后面进行尾调用,格式为XMLAGG(value).getclobval()

注意事项

getclobval()方法仅在数据库兼容模式为Oracle时支持(即数据库实例初始化时指定DBCOMPATIBILITY='A')。

语法格式

XMLAGG(value).getclobval()

参数说明

  • value

    返回XML数据的表达式。

  • getclobval()

    getclobval()用于将xml类型转换为clob类型。

示例

1、创建测试表并插入数据。

create table table_1186549(grade varchar(64),class varchar(64),students_cnt int);

insert into table_1186549 values
('一年级', '一班', 25),
('一年级', '二班', 30),
('一年级', '三班', 20),
('二年级', '一班', 20),
('二年级', '二班', 30),
('二年级', '三班', 20),
('三年级', '一班', 25),
('三年级', '二班', 25),
('三年级', '三班', 25),
('三年级', '四班', 25);

2、查询数据。

select * from table_1186549;

返回结果为:

 grade  | class | students_cnt
--------+-------+--------------
 一年级 | 一班  |           25
 一年级 | 二班  |           30
 一年级 | 三班  |           20
 二年级 | 一班  |           20
 二年级 | 二班  |           30
 二年级 | 三班  |           20
 三年级 | 一班  |           25
 三年级 | 二班  |           25
 三年级 | 三班  |           25
 三年级 | 四班  |           25
(10 rows)

3、调用XMLPARSE函数和XMLAGG函数。

select grade,
xmlagg(xmlparse(content class||';' wellformed) order by class).getclobval()
from table_1186549
group by grade; 

返回结果为:

 grade  |      getclobval
--------+----------------------
 一年级 | 一班;三班;二班;
 三年级 | 一班;三班;二班;四班;
 二年级 | 一班;三班;二班;
(3 rows)

上述查询语句从table_1186549表中按grade分组,并且为每个grade生成一个XML序列,其中每个序列包含按class排序的内容,具体的解释如下:

  • xmlagg(xmlparse(content class||';' wellformed) order by class).getclobval()用于生成XML序列,其中:

    • xmlparse(content class||';' wellformed) order by class为每个content值创建一个XML元素,并且按class列的值排序。content || ';'是将每个content值后面添加一个分号。

    • XMLAGG函数将这些XML元素聚合成一个XML序列。

    • 使用getClobVal()方法将XMLAGG返回的XML类型转换为clob类型。

  • group by grade表示按grade列的值对结果进行分组。