В настоящее время я работаю с Oracle PL/SQL в Oracle 11g. У меня есть два вида XML, из которых я работаю.Объединение двух узлов на одном уровне иерархии с PL/SQL
Следуя образцу двух типов XML и извлечению, которые я сделал до сих пор.
ТИП 1 XML:
<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>
ТИП 2 XML:
<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
Но для TYPE 2 Я не» t знать, как сделать связь между ITEM и PRODUCT, потому что они находятся на одном иерархическом уровне в XML.
Можно ли извлекать данные о товаре, связанные с элементом, без изменения XML?