在Oracle11g中获取XML属性

时间:2017-08-16 18:20:58

标签: sql xml oracle11g xmltype xmltable

我有一个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>

我想将iitemGroup属性提取为列表/表/ select。 例如:

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

我尝试过使用XMLELEMENTXMLTABLEEXTRACT,同时使用getClobVal()也没有成功。

由于我无法创建新的表或程序,最好现在只使用SELECT来解决这个问题。

提前致谢。

1 个答案:

答案 0 :(得分: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