XMLGROUP
XMLGROUP 関数は、整形式 XML 文書である XML 値を戻します。
.-,------------------------------------. V | >>-XMLGROUP--(----expression--+----------------------+-+--------> '-AS--qname-identifier-' >--+---------------------------------------------+--------------> | .-,-----------------------------. | | V .-ASC--. | | '-ORDER BY----sort-key-expression--+------+-+-' '-DESC-' >--+--------------------------------------------+-------------->< | .-----------------------------. | | V (1) .-ROW--"row"----. | | '-OPTION--------+-+-ROW--row-name-+---+-+--)-' | .-ROOT--"rowset"--. | +-+-ROOT--root-name-+-+ '-AS ATTRIBUTES-------'
注:
- 同じ文節を複数回指定することはできません。
- expression
- 各 XML エレメントの内容を式で指定します。 expression のデータ・タイプは、ROWID または DATALINK、あるいは ROWID または DATALINK に基づく特殊タイプ以外でなければなりません。式として、SQL 式を指定することもできます。式が単純な列参照でない場合は、エレメント名を指定する必要があります。AS ATTRIBUTES を指定する場合、expression のデータ・タイプは、XML、または XML に基づく特殊タイプ以外でなければなりません。
- AS qname-identifier
- XML のエレメント名または属性名を SQL ID として指定します。 qname-identifier は、XML 修飾名 (つまり QName) の形式でなければなりません。有効な名前についての詳細は、W3C XML ネーム・スペースの指定の項目を参照してください。名前を修飾する場合は、有効範囲内にネーム・スペース接頭部が宣言されている必要があります。qname-identifier を指定しない場合は、expression を列名にする必要があります。エレメント名または属性名は、列名から QName への完全エスケープ・マッピングを使用して、列名から作成されます。
- ORDER BY
- 集約で処理される、同じグループ化セットからの行の順序を指定します。ORDER BY 文節を指定しない場合、または ORDER BY 文節ではソート・キー値の順序を区別できない場合、同じグループ内の行は任意に順序付けられます。
- sort-key-expression
- 列名または式のどちらかのソート・キー値を指定します。列または式のデータ・タイプは、DATALINK 値または XML 値であってはなりません。
- 順序付けはソート・キーの値に基づいて行われ、これは XML-expression の中で使用される場合もされない場合もあります。
- OPTION
- XML 値を構成するための追加オプションを指定します。OPTION 文節を指定しない場合は、デフォルトの動作が適用されます。
- ROW row-name
- 各行に対応付けるエレメントの名前を指定します。 このオプションを指定しない場合のデフォルトのエレメント名は、「row」です。
- ROOT root-name
- ルート・エレメントの名前を指定します。このオプションを指定しない場合のデフォルトのルート・エレメント名は、「rowset」です。
- AS ATTRIBUTES
- それぞれの式を属性値に対応付けることを指定します。属性名としての役割を果たすのは、列名または qname-identifier です。
XMLGROUP 関数を含むステートメントの実行時に *HEX 以外の照合順序が有効で、しかもソート・キー式 が SBCS データ、混合データ、または Unicode データの場合、結果は重み付けされた値の比較によって求められます。この重み付けされた値は、ソート・キー式 に照合順序を適用して得られます。
この関数の結果は XML です。結果が、NULL になることもあります。値の集合が空である場合は、結果は NULL 値です。それ以外の場合、結果はそのセット内のそれぞれの値ごとに 1 つの項目を含む XML シーケンスです。
注
デフォルトの動作では、結果セットと XML 値の簡単な対応付けを定義するだけですが、関数の動作に当てはまる追加の注意点を以下にまとめます。
- デフォルトでは、各行が「row」という名前の XML エレメントに変換され、各 expression が、ネストされたエレメントに変換されます (列名または qname-identifier がエレメント名になります)。
- NULL 処理の動作は、NULL ON NULL です。サブエレメントが存在しないという状態に、式の NULL 値が対応付けられます。すべての式値が NULL であれば、行のエレメントは生成されません。行のエレメントが生成されなければ、関数から NULL 値が返されます。
- バイナリー・データ・タイプと FOR BIT DATA データ・タイプのバイナリー・コード化スキームは、base64Binary エンコード方式です。
- ルート・エレメントに組み込まれる行のサブエレメントの順序は、照会の結果セットで返される行の順序と同じです。
例
注: XMLGROUP は、出力に空白スペースや改行文字を挿入しません。読みやすくするために、すべての出力例はフォーマット設定されています。
表 T1 に列 C1 と C2 があるとします。
C1 C2
---- ----
1 2
- 2
1 -
- -
- デフォルトの動作で実行する XMLGROUP 照会と出力断片の例を示します。1 つの最上位エレメントが表に対応しています。
単一の結果行に以下の値を戻します。SELECT XMLGROUP(C1, C2) FROM T1
<rowset> <row><C1>1</C1><C2>2</C2></row> <row><C2>2</C2></row> <row><C1>1</C1></row> </rowset>
- 属性中心の対応付けを指定して実行する XMLGROUP 照会と出力断片の例を以下に示します。前の例では、ネストされたエレメントとしてデータを表示しましたが、この例では、データをエレメントの属性に対応付けます。
単一の結果行に以下の値を戻します。SELECT XMLGROUP(C1, C2 OPTION AS ATTRIBUTES) FROM T1
<rowset> <row C1="1" C2="2"/> <row C2="2"/> <row C1="1"/> </rowset>
- デフォルトの <rowset> ルート・エレメントを <document> に置き換え、デフォルトの <row> エレメントを <entry> に置き換えて実行する XMLGROUP 照会と出力断片の例を以下に示します。<column1> エレメントと <column2> エレメントとして列 C1 と C2 を返し、列 C1 を基準にして戻り値のセットを配列します。
単一の結果行に以下の値を戻します。SELECT XMLGROUP(C1 AS "column1", C2 AS "column2" ORDER BY C1 OPTION ROW "entry" ROOT "document") FROM T1
<document> <entry> <column1>1</column1><column2>2</column2></entry> <entry> <column1>1</column1></entry> <entry> <column2>2</column2></entry> </document>