XMLAGG
構文
目的
XMLAgg
は集計ファンクションです。XMLフラグメントのコレクションを取り、集計されたXML文書を戻します。NULLを戻す引数は結果から排除されます。
XMLAgg
は、ノードのコレクションを戻す点を除いて、SYS_XMLAgg
に似ていますが、XMLFormat
オブジェクトを使用した書式設定は受け入れません。また、
XMLAGG
は、SYS_XMLAGG
とは異なり、出力を要素タグで囲みません。
このorder_by_clause
にかぎり、他の使用方法とは異なり、数値リテラルは列の位置として認識されず、単に数値リテラルとして解釈されます。
関連項目:
「XMLELEMENT」および「SYS_XMLAGG」を参照してください。
例
次の例では、従業員のジョブIDと姓を要素の内容とするEmployee
要素を含むDepartment
要素を生成します。
SELECT XMLELEMENT("Department", XMLAGG(XMLELEMENT("Employee", e.job_id||' '||e.last_name) ORDER BY last_name)) as "Dept_list" FROM employees e WHERE e.department_id = 30; Dept_list ------------------------------------------------------------- <Department> <Employee>PU_CLERK Baida</Employee> <Employee>PU_CLERK Colmenares</Employee> <Employee>PU_CLERK Himuro</Employee> <Employee>PU_CLERK Khoo</Employee> <Employee>PU_MAN Raphaely</Employee> <Employee>PU_CLERK Tobias</Employee> </Department>
XMLAGG
が行を集計するため、結果は単一行となります。GROUP
BY
句を使用して、戻された行の集合を複数のグループにまとめることができます。
SELECT XMLELEMENT("Department", XMLAGG(XMLELEMENT("Employee", e.job_id||' '||e.last_name))) AS "Dept_list" FROM employees e GROUP BY e.department_id; Dept_list --------------------------------------------------------- <Department> <Employee>AD_ASST Whalen</Employee> </Department> <Department> <Employee>MK_MAN Hartstein</Employee> <Employee>MK_REP Fay</Employee> </Department> <Department> <Employee>PU_MAN Raphaely</Employee> <Employee>PU_CLERK Khoo</Employee> <Employee>PU_CLERK Tobias</Employee> <Employee>PU_CLERK Baida</Employee> <Employee>PU_CLERK Colmenares</Employee> <Employee>PU_CLERK Himuro</Employee> </Department> . . .