2017-08-16 79 views
0

我有以下數據的XMLTYPE場:獲取XML屬性在Oracle11g中

<itemGroups> 

    <itemGroup description="FirstGroup" id="0"> 
    <items> 
     <item description="FirstItem" id="0"/> 
     <item description="SecondItem" id="1"/> 
    </items> 
    </itemGroup> 

    <itemGroup description="SecondGroup" id="1"> 
    <items> 
     <item description="FirstItem" id="0"/> 
     <item description="SecondItem" id="1"/> 
    </items> 
    </itemGroup> 
</itemGroups> 

,我想提取iitemGroup atributes作爲一個列表/表/選擇。 例子:

Result: 
    DESCRIPTION ID 
    ----------- ----- 
    FirstGroup 0 
    SecondGroup 1 

我使用XMLELEMENTXMLTABLEEXTRACT,也與getClobVal(),但沒有成功嘗試。

因爲我不能創建新的表或過程,所以最好現在只用SELECT來解決這個問題。

在此先感謝。

回答

0

您還沒有表現出與XMLTable的你的嘗試,但它是相當簡單,與@attribute引用屬性:

-- CTE for dummy data 
with t (xml) as (
    select xmltype('<itemGroups> 

    <itemGroup description="FirstGroup" id="0"> 
    <items> 
     <item description="FirstItem" id="0"/> 
     <item description="SecondItem" id="1"/> 
    </items> 
    </itemGroup> 

    <itemGroup description="SecondGroup" id="1"> 
    <items> 
     <item description="FirstItem" id="0"/> 
     <item description="SecondItem" id="1"/> 
    </items> 
    </itemGroup> 
</itemGroups>') from dual 
) 
-- end of CTE 
select x.* 
from t 
cross join xmltable (
    '/itemGroups/itemGroup' 
    passing t.xml 
    columns description varchar2(20) path '@description', 
    id number path '@id' 
) x; 

它得到:

DESCRIPTION    ID 
-------------------- ------ 
FirstGroup    0 
SecondGroup    1