Skip to content

XMLAGG

功能描述

将多行数据转换为一个XML类型的值。

语法格式

XMLAGG((XMLELEMENT ( xmlname, xml_attributes, xmlvalue )))

xml_attributes ::= XMLATTRIBUTES ( xml_attribute_list )
xml_attribute_list ::= ( { xml_attribute } [ , ... ] )
xml_attribute ::= val AS name | ident

参数说明

  • xmlname:XML的标签名。
  • xml_attributes:属性值,由XMLATTRIBUTES函数生成,为可选项。
  • xmlvalue:节点值,为可选项。
  • [ , ... ]:表示可以有多个xml_attribute,每个属性之间用逗号分隔。
  • val AS name:指定一个属性,其中val是属性值name是属性名称。
  • ident:直接使用列名或表达式作为属性名称和属性值。

函数返回类型

CHAR类型。

示例

使用XMLAGG函数将多行数据聚合成一个XML元素,并通过 ORDER BY子句对结果进行排序。

sql
SQL> CREATE TABLE test_xmlagg(id INT,name VARCHAR,addr VARCHAR,age INT);

SQL> INSERT INTO test_xmlagg VALUES(1,'aa','street 01',11);
SQL> INSERT INTO test_xmlagg VALUES(2,'bb','street 01',12);

-- ORDER BY age
SQL> SELECT XMLAGG(XMLELEMENT("person",t.name || ' ' || t.addr)) AS person_info FROM test_xmlagg t ORDER BY t.age;

person_info |
------------------------------------------------------------------------------
<person>aa street 01</person>person>bb street 01</person>|

-- ORDER BY age DESC
SQL> SELECT XMLAGG(XMLELEMENT("person",t.name || ' ' || t.addr)) AS person_info FROM test_xmlagg t ORDER BY t.age DESC;

person_info |
------------------------------------------------------------------------------
<person>aa street 01</person>person>bb street 01</person>|