3.6.8.2. XMLTABLE
XMLTABLE 関数は、XQuery を使用して表形式出力を生成します。XMLTABLE 関数は暗黙的にネストされたテーブルで、FROM 句内で使用できます。XMLTABLE は SQL/XML336 仕様の一部です。
用途
XMLTABLE([<NSP>,] xquery-expression [<PASSING>] [COLUMNS <COLUMN>, ... ]) AS name
XMLTABLE([<NSP>,] xquery-expression [<PASSING>] [COLUMNS <COLUMN>, ... ]) AS name
COLUMN := name (FOR ORDINALITY | (datatype [DEFAULT expression] [PATH string]))
COLUMN := name (FOR ORDINALITY | (datatype [DEFAULT expression] [PATH string]))
NSP - XMLNAMESPACES の定義については、「 XMLELEMENT in XML 関数 」を参照してください。PASSING の定義については、XML 関数 の XMLQUERY を参照してください。
「 XQuery の最適化 」も参照してください。
パラメーター
- オプションの XMLNAMESPACES 句は、XQuery および COLUMN パス式で使用できる namepaces を指定します。
- xquery-expression は有効な XQuery である必要があります。xquery によって返される各シーケンスアイテムは、COLUMNS 句で定義されている値行を作成するために使用されます。
COLUMNS が指定されていない場合は、以下の例のように、アイテム全体を XML 値として返す COLUMNS 句と同等です。
"COLUMNS OBJECT_VALUE XML PATH '."'
"COLUMNS OBJECT_VALUE XML PATH '."'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - FOR ORDINALITY 列は整数として入力され、1 ベースのアイテム番号を値として返します。
- 各ordinalityの列は型を指定し、オプションで PATH 式と DEFAULT 式を指定します。
- PATH が指定されていない場合、パスは列名と同じです。
構文ルール
- FOR ORDINALITY 列のみを指定できます。
- 列名に重複を含めることはできません。
-
バイナリー大規模なオブジェクト(BLOB)データ型を使用できますが、
xs:hexBinary
値には互換性が同梱されます。xs:base64Binary の場合は、明示的な値コンストラクター(xs:base64Binary(<path>)を使用する PATH の回避策を使用
します。 - アレイ以外のタイプが予想される場合は、列式は単一の値に評価される必要があります。
- 配列型を指定すると、シーケンスに要素がない場合は null 値が返されます。
-
値は空の文字列であるため、空の要素は有効な null 値ではありません。
xsi:nil
属性を使用して要素に null 値を指定します。
XMLTABLE の例
- PASSING の使用(1 行を返します [1])
select * from xmltable('/a' PASSING xmlparse(document '<a id="1"/>') COLUMNS id integer PATH '@id') x
select * from xmltable('/a' PASSING xmlparse(document '<a id="1"/>') COLUMNS id integer PATH '@id') x
- ネストされたテーブルとして
select x.* from t, xmltable('/x/y' PASSING t.doc COLUMNS first string, second FOR ORDINALITY) x
select x.* from t, xmltable('/x/y' PASSING t.doc COLUMNS first string, second FOR ORDINALITY) x
- 無効な多値
select * from xmltable('/a' PASSING xmlparse(document '<a><b id="1"/><b id="2"/></a>') COLUMNS id integer PATH 'b/@id') x
select * from xmltable('/a' PASSING xmlparse(document '<a><b id="1"/><b id="2"/></a>') COLUMNS id integer PATH 'b/@id') x
- アレイ多値
select * from xmltable('/a' PASSING xmlparse(document '<a><b id="1"/><b id="2"/></a>') COLUMNS id integer[] PATH 'b/@id') x
select * from xmltable('/a' PASSING xmlparse(document '<a><b id="1"/><b id="2"/></a>') COLUMNS id integer[] PATH 'b/@id') x
- nil 要素
select * from xmltable('/a' PASSING xmlparse(document '<a xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><b xsi:nil="true"/></a>') COLUMNS id integer PATH 'b') x
select * from xmltable('/a' PASSING xmlparse(document '<a xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><b xsi:nil="true"/></a>') COLUMNS id integer PATH 'b') x
上記の例では、nil
属性(xsi:nil="true"
)が指定されていない場合に例外がスローされ、b
を整数値に変換します。