XMLAGG 集約関数

XMLAGG 関数は、1 セットの XML 値の中の NULL 以外の値ごとに 1 つの項目を含む XML シーケンスを戻します。

構文図を読むビジュアルシンタックスダイアグラムをスキップするXMLAGG( XML表現ORDER BY,sort-keyASCDESC)

sort-key

構文図を読むビジュアルシンタックスダイアグラムをスキップするカラム名

スキーマは SYSIBM です。

XML表現
XML 値を戻す式。

他の集約関数の引数とは異なり、XML-expression の中ではスカラー全選択を使用できます。

ORDER BY
集合内の処理対象の、同じグループ化集合に属する行の順序を指定します。 ORDER BY 文節を指定しない場合、または ORDER BY 文節ではソート・キー値の順序を区別できない場合、同じグループ内の行は任意に順序付けられます。
ソートキー
列名または式のどちらかのソート・キー値を指定します。 列または式のデータ・タイプは、LOB 値または XML 値であってはなりません。 文字ストリング式の長さは、4000 バイトを超えることはできません。 ソート・キー値が定数の場合、それは出力列の位置を参照するもの (通常の ORDER BY 文節のように) ではなく、単なる定数です。これは、ソート・キーではないことを意味しています。

順序付けはソート・キーの値に基づいて行われ、これは XML-expression の中で使用される場合もされない場合もあります。

ソート・キー値が Unicode 以外のコード化スキームを使用する文字ストリングの場合、順序付けは異なる可能性があります。 例えば、列 PRODCODE は EBCDIC を使用しているとします。 2 つの値 ('P001' と 'PA01') の場合、関係 'P001' > 'PA01' は EBCDIC では真であり、'P001' < 'PA01' は UTF-8 では真です。 同じソート・キー値が XML-expression の中で使用されている場合は、CAST 指定を使用してソート・キーを Unicode に変換することにより、XML 値の順序付けをソート・キーの順序付けと整合させることができます。

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

結果は NULL になる可能性があります。XML-expression 引数がすべて NULL の場合、結果は NULL 値です。 空のセットに関数を適用すると、結果は NULL 値となります。 それ以外の場合、結果はそのセット内のそれぞれの値ごとに 1 つの項目を含む XML シーケンスです。

変更の開始以下の制約が XMLAGG に適用されます。変更の終わり

  • 変更の開始XMLAGG は OLAP 仕様の一部として使用できません。変更の終わり
  • 変更の開始XMLAGG 関数の呼び出しが含まれている SELECT節に、ARRAY_AGG 関数または LISTAGG 関数の呼び出しも含めてはなりません。変更の終わり
例: 従業員を部門別にグループ化し、部門の名前を属性として使用して各部門ごとに「Department」エレメントを生成し、各部門の従業員に対応する「emp」エレメントをすべてネストし、「emp」エレメントを「lname」によって順序付けます。
   SELECT XMLSERIALIZE(XMLDOCUMENT
         ( XMLELEMENT
         ( NAME "Department",
           XMLATTRIBUTES ( e.dept AS "name" ), 
           XMLAGG ( XMLELEMENT ( NAME "emp", e.lname)
                    ORDER BY e.lname)
                  ) ) AS "dept_list"
                      AS CLOB(1M))
     FROM employees e
     GROUP BY dept;
照会の結果は、次の結果のようになります。
   dept_list
 ---------------------------------------------
<Department name="Accounting">
  <emp>SMITH</emp>
  <emp>Yates</emp>
 </Department>
 <Department name="Shipping">
  <emp>Martin</emp>
  <emp>Oppenheimer</emp>
 </Department>
------------------------------------------------