4

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

这是文档的示例片段。客户在我们的 xml 文档中有两条记录:

<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章
  2. 123 纽约阿克米

但是,我下面的查询返回

ID 名称 状态

  1. 第123章
  2. 123 纽约阿克米
  3. 第123章

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;
4

0 回答 0