XML Oracle - 提取重复节点

时间:2013-10-25 17:29:09

标签: xml oracle nodes shred xmltable

我将xml doc加载到Oracle 11g的xmltype列中。我的文档有重复的节点,我需要展平。我一直在使用XMLTable但得到单例错误。如果涉及子节点,我找到了一个解决方案,但无法让它与重复节点一起工作。感谢任何帮助!

以下是doc的示例片段。客户在我们的xml doc中有两条记录:

<Customers>
  <Customer>
    <Id>123</Id>
    <Name>Acme</Name>
    <State>CA</State>
    <State>NY</State>
  </Customer>
  <Customer>
    <Id>456</Id>
    <Name>Acme</Name>
    <State>FL</State>
  </Customer>
</Customers>

对于Acme客户123,我试图获得以下结果集:

ID    Name    State
  1. 123 Acme CA
  2. 123 Acme NY
  3. 但是,我的查询返回

    ID名称状态

    1. 123 Acme Ca
    2. 123 Acme NY
    3. 123 Acme FL
    4. FL属于Acme的ID = 456记录。这是我的查询,不知道如何强制连接在我的两个XMLTables之间正确限制id。

      select distinct 
           xmlTable1.Id
          ,xmlTable1.Name
          ,xmlTable2.State
        from FILE_XML FX,
                            xmltable('//Customer'
                            PASSING FX.XML_COLUMN
                            columns
                            Name     VARCHAR2(255) PATH '//Name'      
                            ,Id      VARCHAR2(255) PATH '//Id'     
                            ,States  XmlType       Path '//Customer'
                            ) xmlTable1
      
        left join xmltable('//State'
                            passing xmlTable1.States
                            columns
                            State VARCHAR2(255)  path '.') XMLTable2
          on (1=1)
      where xmltable1.id = 123;
      

0 个答案:

没有答案