XML Oracle - извлечение повторяющихся узлов

У меня есть XML документ загружен в столбец xmltype в Oracle 11g. В моем документе есть повторяющиеся узлы, которые мне нужно сплющить. Я использую 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 Acme CA
  2. 123 Acme NY

Тем не менее, мой запрос ниже возвращает

ID Имя Штат

  1. 123 Acme Ca
  2. 123 Acme NY
  3. 123 Acme FL

FL принадлежит идентификатору Акме = 456. Вот мой запрос, я не уверен, как заставить соединение правильно ограничить идентификатор между двумя моими XMLTables.

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 ответов

Другие вопросы по тегам