COLUMNS
Id VARCHAR2(50) PATH '@id',
DestinationName VARCHAR2(50) PATH 'string-join(distinct-values(*:outOfServices/*:outOfService/*:document/@destinationName),", ")'
Вам не нужно использовать пространство имен для нефиксированных атрибутов. Их пространства имен определены как родительский элемент.
В примере xml есть несколько cern:outOfService
, поэтому я использую string-join
и distinct-values
Обновление:
1) Это длиннее, но более понятно для меня. Объединение двух таблиц xml.
select * from xmltable('*:bulletinWork' passing xmltype('<cern:bulletinWork id="5307cedc-2208-3701-9b9d-e69664b1ef31" xmlns:cern="aaa">
<cern:outOfServices>
<cern:outOfService id="e95d491b-2876-3e08-901f-b0f79be86bfb">
<cern:document destinationName="MonsA" type="S427"></cern:document>
</cern:outOfService>
<cern:outOfService id="fab04992-a33f-3a8c-ad16-29cd54fb93d6">
<cern:document destinationName="MonsB" type="S427"></cern:document>
</cern:outOfService>
</cern:outOfServices>
</cern:bulletinWork>')
COLUMNS
Id VARCHAR2(50) PATH '@id',
outOfServices xmltype path '*:outOfServices'
) t1
,xmltable('*:outOfServices/*:outOfService' passing t1.outOfServices
COLUMNS DestinationName VARCHAR2(50) PATH '*:document/@destinationName')
2) Доступ к родительскому узлу из дочернего узла.
select * from xmltable('*:bulletinWork/*:outOfServices/*:outOfService' passing xmltype('<cern:bulletinWork id="5307cedc-2208-3701-9b9d-e69664b1ef31" xmlns:cern="aaa">
<cern:outOfServices>
<cern:outOfService id="e95d491b-2876-3e08-901f-b0f79be86bfb">
<cern:document destinationName="MonsA" type="S427"></cern:document>
</cern:outOfService>
<cern:outOfService id="fab04992-a33f-3a8c-ad16-29cd54fb93d6">
<cern:document destinationName="MonsB" type="S427"></cern:document>
</cern:outOfService>
</cern:outOfServices>
</cern:bulletinWork>')
COLUMNS
Id VARCHAR2(50) PATH './../../@id',
DestinationName VARCHAR2(50) PATH '*:document/@destinationName'
)