現在、Oracle11gでOraclePL/SQLを使用しています。私は2種類のXMLを使用しています。
2種類のXMLのサンプルと、これまでに行った抽出に続いて。
タイプ1XML:
<ListItens1 xmlns=“xpto”>
<item id=”1”>
<product type=”fruit”>
<model> Apple </model>
<date>02/19/2013</date>
<year>2013</year>
</product>
</item >
<item id=”2”>
<product type=”notebook”>
<model> Vostro </model>
<date>02/19/2013</date>
<year> 2013 </year>
</product>
</item>
</ListItens1>
タイプ2XML:
<ListItens2 xmlns=“xpto”>
<item>1</item>
<product type=”fruit”>
<model> Apple </model>
<date>02/19/2013</date>
<year>2013</year>
</product>
<item>2</item>
<product type=”notebook”>
<model> Vostro </model>
<date>02/19/2013</date>
<year> 2013 </year>
</product>
<ListItens2>
これらのXMLは、タイプXMLTYPEのアーカイブと呼ばれるフィールドを持つテーブルに挿入されています。
CREATE TABLE XML_PRODUCT ( ID_XML NUMBER, DATA DATE, ARCHIVE XMLType);
XMLがタイプ1の場合、私はこのように問題なく実行しています。
SELECT
ExtractValue( value( NFe ) , '/item/@id', 'xmlns="xpto' ) ID,
ExtractValue( value( NFe ) , '/item/product/@type', 'xmlns="xpto' ) TYPE,
ExtractValue( value( NFe ) , '/item/product/model', 'xmlns="xpto' ) MODEL,
ExtractValue( value( NFe ) , '/item/product/date'', 'xmlns="xpto' ) DATE,
ExtractValue( value( NFe ) , '/item/product/year'', 'xmlns="xpto' ) YEAR,
FROM XML_PRODUCT,
TABLE( XMLSequence( Extract ( ARCHIVE, '/listItens1/item', 'xpto' ) ) ) NFe
WHERE ID_XML = 1;
結果は次のようになります。
ID | TYPE | MODEL | DATE | YEAR
-----------------------------------------------
1 | fruit | Apple | 02/19/2013 | 2013
2 | notebook | Vostro | 02/19/2013 | 2013
しかし、タイプ2の場合、アイテムと製品はXMLの同じ階層レベルにあるため、それらを関連付ける方法がわかりません。
XMLを変更せずに、アイテムに関連付けられている製品データを抽出することは可能ですか?