XMLSEQUENCE
ノート:
XMLSEQUENCE
ファンクションは、非推奨です。これは、下位互換性を保つためにのみサポートされています。ただし、かわりにXMLTABLE
ファンクションを使用することをお薦めします。詳細は、「XMLTABLE」を参照してください。
構文
目的
XMLSEQUENCE
には2つの書式があります。
-
1つ目の書式は、入力として
XMLType
インスタンスを取り、XMLType
にあるトップレベルのノードのVARRAYを戻します。この書式のかわりに、SQL/XML標準ファンクションXMLTable
を使用すると効果的です。このファンクションを使用すると、SQLコードがより読みやすくなります。Oracle Database 10gリリース2より前のリリースでは、このリリースのXMLTable
ファンクションでより効果的に実行されるいくつかの機能を、XMLSequence
がSQLファンクションTABLE
を使用して実行していました。 -
2つ目の書式は、入力として
REFCURSOR
インスタンスおよびオプションのXMLFormat
オブジェクトのインスタンスを取り、カーソルの各行に対して、XMLSequence
型としてXML文書を戻します。
XMLSEQUENCE
はXMLType
のコレクションを戻すため、このファンクションをTABLE
句で使用して、コレクション値をネスト解除することで複数行にし、SQL問合せでの処理をさらに進めることができます。
関連項目:
このファンクションの詳細は、『Oracle XML DB開発者ガイド』を参照してください。また「XMLTABLE」も参照してください。
例
次の例では、XMLSEQUENCE
が複数の要素を持つXML文書をVARRAY
型の単一要素ドキュメントに分割する方法を示しています。この例では、TABLE
キーワードが、コレクションを副問合せのFROM
句で使用できる表の値とみなすように、Oracle Databaseに指示しています。
SELECT EXTRACT(warehouse_spec, '/Warehouse') as "Warehouse" FROM warehouses WHERE warehouse_name = 'San Francisco'; Warehouse ------------------------------------------------------------ <Warehouse> <Building>Rented</Building> <Area>50000</Area> <Docks>1</Docks> <DockType>Side load</DockType> <WaterAccess>Y</WaterAccess> <RailAccess>N</RailAccess> <Parking>Lot</Parking> <VClearance>12 ft</VClearance> </Warehouse> 1 row selected. SELECT VALUE(p) FROM warehouses w, TABLE(XMLSEQUENCE(EXTRACT(warehouse_spec, '/Warehouse/*'))) p WHERE w.warehouse_name = 'San Francisco'; VALUE(P) ---------------------------------------------------------------- <Building>Rented</Building> <Area>50000</Area> <Docks>1</Docks> <DockType>Side load</DockType> <WaterAccess>Y</WaterAccess> <RailAccess>N</RailAccess> <Parking>Lot</Parking> <VClearance>12 ft</VClearance> 8 rows selected.