XMLAGG 集約関数
XMLAGG 関数は、それぞれの非 NULL 値の項目を XML 値のセットに含む XML シーケンスを戻します。
スキーマは 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 は、出力にブランク・スペースや改行文字を挿入しません。 例の出力はすべて、読みやすくするために書式を整えています。