XMLFOREST
XMLFOREST 関数は、XML エレメントのシーケンスである XML 値を戻します。
>>-XMLFOREST--(--+------------------------------+---------------> '-xmlnamespaces-declaration--,-' .-,------------------------------------------------. V | >----element-content-expression--+------------------+-+---------> '-AS--element-name-' >--+------------------------------------------------------+--)->< | .--------------------------------------. | | V .-NULL ON NULL--. | (1) | '-OPTION----+-+-EMPTY ON NULL-+----------------+-+-----' | .-USING-. | | .-XMLBINARY--+-------+--BASE64-. | | | .-USING-. | | '-+-XMLBINARY--+-------+--HEX----+-'
注:
- 同じ文節を複数回指定することはできません。
- xmlnamespace-declaration
- XMLNAMESPACES 宣言の結果である XML ネームス・ペース宣言を指定します。宣言されるネーム・スペースは、XMLFOREST 関数の有効範囲内にあるものです。名前空間は、別の副選択の中で現れるかどうかにかかわらず、XMLFOREST 関数内でネストされているすべての XML 関数に対して適用されます。 XML ネーム・スペースの宣言について詳しくは、XMLNAMESPACESを参照してください。
- xmlnamespace-declaration を指定しない場合、ネーム・スペース宣言は構成された XML エレメントに関連付けられません。
- element-content-expression
- 生成される XML エレメントの内容に使われる値を戻す式を指定します。式のデータ・タイプは、ROWID または DATALINK であってはなりません。式が単純な列参照でない場合は、element-name を指定する必要があります。
- AS element-name
- XML エレメント名として使用される ID を指定します。
- XML エレメント名は XML 修飾名または QName であることが必要です。有効な名前についての詳細は、W3C XML ネーム・スペースの指定の項目を参照してください。名前を修飾する場合は、有効範囲内にネーム・スペース接頭部が宣言されている必要があります。
- element-name を指定しない場合、element-content-expression は列名にする必要があります。エレメント名は、列名から QName への完全エスケープ・マッピングを使用して、列名から作成されます。
- OPTION
- NULL 値、バイナリー・データ、およびビット・データの結果に関するオプションを指定します。このオプションは、element-content-expression に現れる XMLELEMENT 関数または XMLFOREST 関数によって継承されません。
- NULL ON NULL または EMPTY ON NULL
- すべての element-content-expression 値が NULL 値の場合に、NULL 値と空エレメントのどちらを戻すかを指定します。このオプションが影響を与えるのは、element-content-expression 引数の NULL の処理に関してのみです。
デフォルトは NULL ON NULL です。
- NULL ON NULL
- 各 element-content-expression の値が NULL の場合、NULL 値が戻されます。
- EMPTY ON NULL
- 各 element-content-expression の値が NULL の場合、空のエレメントが戻されます。
- XMLBINARY USING BASE64 または XMLBINARY USING HEX
- バイナリー入力データ、FOR BIT DATA 属性を指定した文字ストリング、ROWID、またはこれらのタイプのいずれかに基づく特殊タイプに対して想定されるエンコードを指定します。エンコードは要素コンテントまたは属性値に適用されます。デフォルトは XMLBINARY USING BASE64 です。
- XMLBINARY USING BASE64
- 想定されるエンコードは、XML スキーマ・タイプ xs:base64Binary エンコードに対して定義された base64 文字であることを指定します。Base64 エンコードは US-ASCII (10 個の数字、26 個の小文字、26 個の大文字、「+」および「/」) の 65 文字サブセットを使用して、6 ビットのすべてのバイナリー・データまたはビット・データをこのサブセットの印刷可能文字で表します。これらの文字は、例外なく表示できるように選択されます。この方式を使用すると、エンコードされたデータのサイズは元のバイナリー・データまたはビット・データのサイズよりも 33 パーセント大きくなります。
- XMLBINARY USING HEX
- 想定されるエンコードは、XML スキーマ・タイプ xs:hexBinary エンコードに対して定義された 16 進文字であることを指定します。16 進エンコードは、それぞれのバイト (8 ビット) を 2 桁の16 進文字で表します。この方式を使用すると、エンコードされたデータのサイズは元のバイナリー・データまたはビット・データのサイズの 2 倍になります。
この関数の結果は XML 値です。いずれかの element-content-expression の結果が NULL の場合、結果も NULL になる可能性があります。すべての element-content-expression の結果が NULL の場合、NULL ON NULL オプションが有効になっていると、結果は NULL 値になります。
XMLFOREST 関数は、XMLCONCAT 関数と XMLELEMENT 関数を使用して表すことができます。例えば、次の 2 つの式は同じ意味合いです。
XMLFOREST(xmlnamespaces-declaration, arg1 AS name1, arg2 AS name2, ...)
XMLCONCAT(XMLELEMENT(NAME name1, xmlnamespaces-declaration, arg1),
XMLELEMENT(NAME name2, xmlnamespaces-declaration, arg2),
... )
デフォルトのネーム・スペースを定義する別のエレメントの内容としてコピーされるエレメントを構成する場合、デフォルトのネーム・スペースはコピーされたエレメント内で明示的に宣言解除する必要があります。これは、新規の親エレメントからデフォルトのネーム・スペースを継承した結果として生じる可能性のあるエラーを避けるためです。事前定義ネーム・スペース接頭部 (「xs」、「xsi」、「xml」、および「sqlxml」) をその使用時に明示的に宣言する必要もあります。
例
注: XMLFOREST は、出力の中にブランク・スペースまたは改行文字を挿入しません。読みやすくするために、すべての出力例はフォーマット設定されています。
- デフォルトのネーム・スペースを持つエレメントのフォレストを構成します。
SELECT EMPNO, XMLFOREST(XMLNAMESPACES(DEFAULT 'http://hr.org', 'http://fed.gov' AS "d"), LASTNAME, JOB AS "d:job") AS "Result" FROM EMPLOYEE WHERE EDLEVEL = 12
この照会は下記の結果を生成します。
EMPNO Result 000290 <LASTNAME xmlns:"http://hr.org" xmlns:d="http://fed.gov">PARKER </LASTNAME> <d:job xmlns:"http://hr.org" xmlns:d="http://fed.gov">OPERATOR</d:job> 000310 <LASTNAME xmlns:"http://hr.org" xmlns:d="http://fed.gov">SETRIGHT </LASTNAME> <d:job xmlns:"http://hr.org" xmlns:d="http://fed.gov">OPERATOR</d:job> 200310 <LASTNAME xmlns:"http://hr.org" xmlns:d="http://fed.gov">SPRINGER </LASTNAME> <d:job xmlns:"http://hr.org" xmlns:d="http://fed.gov">OPERATOR</d:job>