2016-02-16 48 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()' 
        );