2016-02-16 2 views
0

enter image description here Мне нужно сделать отчет, извлекая имя элемента xml из данных clob в oracle 11g. Таблица продуктов хранит свой атрибут как clob XML, который может содержать несколько атрибутов. Значение, сохраненное в формате ниже:Как извлечь список атрибутов атрибутов clob из oracle

200.0Manufacturer1235/V

Здесь я нужен отчет, который должен содержать атрибуты имя как Rebate, SellerOwnerID, SellerOwnerValue. Я могу извлечь данные clob, но я не знаю, как получить список имен атрибутов.

+0

не показывает XML в правильном пути, так что я загрузил изображения. –

+0

Пожалуйста, дайте мне образец XML –

+0

<атр Name = "Rebate"> 200,0<атр имя = "SellerOwnerID"> Производитель<атр имя = "SellerOwnerValue"> 1235/V

ответ

0

Выполнить ниже запрос для получения требуемого выходного

SELECT EXTRACTVALUE (COLUMN_VALUE, '/attr/@name') attribute, 
     EXTRACTVALUE (COLUMN_VALUE, '/attr/double') double, 
     EXTRACTVALUE (COLUMN_VALUE, '/attr/string') string 
    FROM TABLE(XMLSEQUENCE(EXTRACT(XMLTYPE('<attrs><attr name="Rebate"><double>200.0</double></attr><attr name="SellerOwnerID"><string>Manufacturer</string></attr><attr name="SellerOwnerValue"><string>1235/V</string></attr></attrs>'),'/attrs/attr'))) 
+0

Спасибо Dinesh, Существует проблема с написанием запроса таким образом. Я объясню сложность. Имя атрибута Имя столбца продукта. Атрибут столбца может хранить XML, который имеет несколько атрибутов, и это не исправлено. Для образца, который у меня есть, он имеет 3 атрибута, но у другого продукта может быть 40-50 атрибутов. Можем ли мы написать что-то общее? –

+0

Можете ли вы поделиться этим сложным xml –

+0

XML, который я прикреплл, извлекается из столбца DB clob. Фактический XML имеет разный набор структуры. Когда мы обрабатываем XML-файл продукта, мы сохраняем атрибуты продукта в прикрепленном формате XML. Просто для другого экземпляра я прикрепляю другой образец из другого продукта. –

0
with abc as (select * from 
(select 'Prod1' prod_name,xmltype('<attrs><attr name="Rebate"><double>200.0</double></attr><attr name="SellerOwnerID"><string>Manufacturer</string></attr><attr name="SellerOwnerValue"><string>1235/V</string></attr></attrs>') xxx from dual 
union all 
select 'Prod2',xmltype('<attrs><attr name="Rebate"><double>200.0</double></attr><attr name="SellerOwnerID"><string>Manufacturer</string></attr><attr name="SellerOwnerValue"><string>1235/V</string></attr><attr name="Rebate"><double>200.0</double></attr><attr name="SellerOwnerID"><string>Manufacturer</string></attr><attr name="SellerOwnerValue"><string>1235/V</string></attr></attrs>') from dual 
)) 
select prod_name,attr_name,attr_type,attr_value from abc,xmltable('attrs/attr' 
       passing abc.xxx 
       columns 
        attr_name varchar2(30) path '@name', 
        attr_type varchar2(30) path '*/name()', 
        attr_value varchar2(30) path '*/text()' 
        ); 
Смежные вопросы