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
- 123 Acme CA
- 123 Acme NY
Тем не менее, мой запрос ниже возвращает
ID Имя Штат
- 123 Acme Ca
- 123 Acme NY
- 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;