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>