XMLAGG

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

構文図を読む構文図をスキップする
>>-XMLAGG--(--XML-expression--+---------------------------------------------+--)-><
                              |           .-,-----------------------------. |      
                              |           V                      .-ASC--. | |      
                              '-ORDER BY----sort-key-expression--+------+-+-'      
                                                                 '-DESC-'          

XML-expression
XML 値を戻す式。
ORDER BY
集約で処理される、同じグループ化セットからの行の順序を指定します。ORDER BY 文節を指定しない場合、または ORDER BY 文節ではソート・キー値の順序を区別できない場合、同じグループ内の行は任意に順序付けられます。
sort-key-expression
列名または式のどちらかのソート・キー値を指定します。列または式のデータ・タイプは、DATALINK 値または XML 値であってはなりません。
順序付けはソート・キーの値に基づいて行われ、これは XML-expression の中で使用される場合もされない場合もあります。
ソート・キー式 の長さ属性の合計 は 3.5 ギガバイトを超えてはなりません。

XMLAGG 関数を含むステートメントの実行時に *HEX 以外の照合順序が有効で、しかもソート・キー式 が SBCS データ、混合データ、または Unicode データの場合、結果は重み付けされた値の比較によって求められます。この重み付けされた値は、ソート・キー式 に照合順序を適用して得られます。

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

結果のデータ・タイプは XML です。結果が、NULL になることもあります。値のセットが空の場合、結果は NULL 値になります。それ以外の場合、結果はそのセット内のそれぞれの値ごとに 1 つの項目を含む XML シーケンスです。

注: XMLAGG は、出力に空白スペースや改行文字を挿入しません。読みやすくするために、すべての出力例はフォーマット設定されています。
  • 従業員を部門別にグループ化し、部門の名前を属性として使用して各部門ごとに「Department」エレメントを生成し、各部門の従業員に対応する「emp」エレメントをすべてネストし、「emp」エレメントを LASTNAME によって順序付けます。
    SELECT XMLSERIALIZE(XMLDOCUMENT (
                XMLELEMENT(NAME "Department",
                           XMLATTRIBUTES(E.WORKDEPT AS "name"),
                           XMLAGG(XMLELEMENT ( NAME "emp", E.LASTNAME)
                                  ORDER BY E.LASTNAME)
                           ))
                           AS CLOB(200)) 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>