2013-02-19 3 views
0

В настоящее время я работаю с 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?

ответ

1

вы можете сначала извлечь счетчик товаров, а затем получить от этого продукт.