2016-02-16 44 views
0

enter image description here我需要通过从oracle 11g中的clob数据中提取xml元素名称来生成报告。产品表将其属性存储为clob XML,其中可以存储多个属性。下面的格式存储在Value:如何从oracle中提取clob XML属性名称列表

200.0Manufacturer1235/V

在这里,我需要它应该包含属性名称,比如回扣,SellerOwnerID,SellerOwnerValue报告。我可以提取clob数据,但我不知道如何获取属性名称列表。

+0

没有出现在正确的方法,所以我已经上传的图片XML。 –

+0

请给我示例XML –

+0

200.0厂商 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()' 
        );