2017-08-16 96 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