XMLAGG 集約関数

XMLAGG 関数は、それぞれの非 NULL 値の項目を XML 値のセットに含む XML シーケンスを戻します。

Read syntax diagramSkip visual syntax diagramXMLAGG(XML-expression ORDER BY,sort-keyASCDESC )

スキーマは SYSIBM です。 関数名を修飾名で指定することはできません。

XML 式
データ・タイプ XML の式を指定します。 データ・タイプ XML-expression を、BINARY または VARBINARY タイプとすることはできません (SQLSTATE 42884)。
ORDER BY
集合内の処理対象の、同じグループ化集合に属する行の順序を指定します。 ORDER BY 節を省略した場合や、ORDER BY が列データの ORDER BY を特定できない場合、 同一のグループ化集合内の行は任意に順序付けられます。
ソート・キー
ソート・キーは、列名または sort-key-expression のどちらでも構いません。 ソート・キーが定数の場合、 ソート・キーは出力列の位置を (通常の ORDER BY 節におけるように) 参照しませんが、 これは単なる定数でしかなく、ソート・キーではないことを意味することに注意してください。

結果のデータ・タイプは XML です。

この関数は、引数の値から NULL 値を除いて求めた値の集合に対して適用されます。

XML-expression 引数が NULL 値になる可能性がある場合、結果も NULL 値になる可能性があります。 値のセットが空の場合、結果は NULL 値になります。 それ以外の場合、結果は各値の項目をセットに含む XML シーケンスになります。

SELECT 節に ARRAY_AGG 関数が組み込まれている場合、同じ SELECT 節にある ARRAY_AGG、LISTAGG、XMLAGG、および XMLGROUP 関数のすべての呼び出しにおいて、同じ順序を指定するか、または順序を指定しないかのいずれかにする必要があります (SQLSTATE 428GZ)。

  • OLAP 式でのサポート: XMLAGG を、OLAP 集約関数の列関数として使用することはできません (SQLSTATE 42601)。

姓別にソートされた従業員のリストを含む、各部門の部門エレメントを構成します。
   SELECT XMLSERIALIZE(
     CONTENT XMLELEMENT(
       NAME "Department", XMLATTRIBUTES(
         E.WORKDEPT AS "name"
       ),
       XMLAGG(
         XMLELEMENT(
           NAME "emp", E.LASTNAME
         )
         ORDER BY E.LASTNAME
       )
     )
     AS CLOB(110)
   )
   AS "dept_list"
   FROM EMPLOYEE E
   WHERE E.WORKDEPT IN ('C01','E21')
   GROUP BY WORKDEPT
この照会は、次のような結果を生成します。
dept_list
-----------------------...
<Department name="C01">
  <emp>KWAN</emp>
  <emp>NICHOLLS</emp>
  <emp>QUINTANA</emp>
</Department>
<Department name="E21">
  <emp>GOUNOT</emp>
  <emp>LEE</emp>
  <emp>MEHTA</emp>
  <emp>SPENSER</emp>
</Department>
注: XMLAGG は、出力にブランク・スペースや改行文字を挿入しません。 例の出力はすべて、読みやすくするために書式を整えています。