Здравствуйте, я новичок в Oracle XML DB, но должен извлечь значения атрибута с помощью другого значения атрибута.
Упрощенный документ выглядит следующим образом:
<ApplicationDataNotification>
<ApplicationData>
<DataSet Name="A1">
<Data DataElement="PAND" Value="A100"/>
<Data DataElement="MKDI" Value="007"/>
</DataSet>
<DataSet Name="A2">
<Data DataElement="PAND" Value="B200"/>
<Data DataElement="MKDI" Value="900"/>
</DataSet>
</ApplicationData>
</ApplicationDataNotification>
Если использовать позиционную нотациюэто работает (возвращает: A100):
with testTable(xml_val)
as (
select xmltype(
'
<ApplicationDataNotification>
<ApplicationData>
<DataSet Name="A1">
<Data DataElement="PAND" Value="A100"/>
<Data DataElement="MKDI" Value="007"/>
</DataSet>
<DataSet Name="A2">
<Data DataElement="PAND" Value="B200"/>
<Data DataElement="MKDI" Value="900"/>
</DataSet>
</ApplicationData>
</ApplicationDataNotification>
') from dual)
select xmlcast(xmlquery('/ApplicationDataNotification/ApplicationData/DataSet[1]/Data[1]/@Value' passing xml_val returning content) as varchar2(2000)) as PAN
from testTable;
Но проблема в том, что порядок тегов xml не фиксирован.
Таким образом, я попытался использовать этот подход:
with testTable(xml_val)
as (
select xmltype(
'
<ApplicationDataNotification>
<ApplicationData>
<DataSet Name="A1">
<Data DataElement="PAND" Value="A100"/>
<Data DataElement="MKDI" Value="007"/>
</DataSet>
<DataSet Name="A2">
<Data DataElement="PAND" Value="B200"/>
<Data DataElement="MKDI" Value="900"/>
</DataSet>
</ApplicationData>
</ApplicationDataNotification>
') from dual)
select xmlcast(xmlquery('/ApplicationDataNotification/ApplicationData/DataSet[Name="A1"]/Data[DataElement="PAND"]/@Value' passing xml_val returning content) as varchar2(2000)) as PAN
from testTable;
И возвращается ноль.
Извините, но я озадачен ... Не могли бы вы помочь, пожалуйста!Как переписать запрос, чтобы заставить работать?PS: Oracle 12g