ORACLE SQL リファレンス(逆引き)


Web oracle.se-free.com
複数レコードを1レコードにまとめて整形式のXMLtypeインスタンスを出力する(SYS_XMLAGG、SYS_XMLGEN)
スポンサード リンク

複数レコードを1レコードにまとめて整形式のXMLtypeインスタンスを出力するには、SYS_XMLAGG関数、SYS_XMLGEN関数を使用します。

SELECT
 SYS_XMLAGG( SYS_XMLGEN
( 要素名 , 項目 ),
             [ XMLFormat( 親要素名 ) ] )
FROM 表

SELECTの結果を整形式のXMLtypeインスタンスで返します。

SYS_XMLGENの第二引数で指定した出力項目の全レコードを、まとめて、1行のXMLtypeインスタンスで出力します。

SYS_XMLAGG関数の第二引数で、XMLFormat関数を指定しない場合、親要素名が「ROWSET」で返されます。

NULLの項目はXML要素が出力されません。
※XMLType型は、XML文書をCLOB型に格納したものなので、クライアント側でSELECTしたらCLOBデータとして操作します。


サンプル表「EMP」のデータ

SQL> SELECT * FROM EMP;

EMP_ID DEPT_ID EMP_NAME SALARY
-----  -----  --------- ----------
E01    D01    なまえ1    150
E02    D02    なまえ2    300
E03    D03    なまえ3    



例1) 表「emp 」の項目「salary」のselect結果を1レコードにまとめてXMLtypeで出力します。

SQL> select
  2  sys_xmlagg( sys_xmlgen( salary ))
  3 from emp;

SYS_XMLAGG(SYS_XMLGEN(SALARY))
--------------------------------------------------------------

<?xml version="1.0"?>
<ROWSET>
<SALARY>150</SALARY>
<SALARY>200</SALARY>
</ROWSET>


 親要素<ROWSET>として出力されます。


例2) 表「emp 」の項目「salary」のselect結果を1レコードにまとめてXMLtypeで出力します。
    親要素名「emp」を指定します。

SQL> select
  2  sys_xmlagg( sys_xmlgen( salary ),XMLFormat('emp'))
  3 from emp;

SYS_XMLAGG(SYS_XMLGEN(SALARY),XMLFORMAT('EMP'))
---------------------------------------------------------------

<?xml version="1.0"?>
<emp>
<SALARY>150</SALARY>
<SALARY>200</SALARY>
</emp>



スポンサード リンク


レコード別に整形式のXMLtypeインスタンスを出力する( SYS_XMLGEN )
複数レコードを1レコードにまとめて整形式のXMLtypeインスタンスを出力する( SYS_XMLAGG、SYS_XMLGEN )
レコード別にXMLtypeインスタンスを出力する1( XMLCONCAT、XMLELEMENT )
レコード別にXMLtypeインスタンスを出力する2( XMLFOREST )
複数レコードを1レコードにまとめてXMLtypeインスタンスを出力する( XMLAGG、XMLELEMENT )
属性名を指定してレコード別にXMLtypeインスタンスを出力する1( XMLATTRIBUTES、XMLELEMENT )
属性名を指定してレコード別にXMLtypeインスタンスを出力する2( XMLCOLATTVAL )

SQL(DML2) へ
忘れっぽいエンジニアのオラクルSQLリファレンス TOPへ