Вы не опубликовали имя или структуру таблицы, поэтому здесь я использую mytable
в качестве имени таблицы и xmlcol
в качестве столбца xmltype.Предложение WITH в верхней части просто для предоставления тестовых данных.
with mytable as (select xmltype('<attributes>
<upper_lvl_ver_desc>
<Name>AABB</Name>
<Description>pkListValue</Description>
<Value/>
</upper_lvl_ver_desc>
<upper_lvl_ver_desc>
<Name>GL_PS_ALLOWED</Name>
<Description>pkListValue</Description>
<Value/>
</upper_lvl_ver_desc>
<upper_lvl_ver_desc>
<Name>PrimeSub</Name>
<Description>pkListValue</Description>
<Value>Y</Value>
</upper_lvl_ver_desc>
</attributes>') as xmlcol from dual)
-- query starts here
select xmlcol
from mytable
inner join XMLTable('/attributes/upper_lvl_ver_desc' PASSING mytable.xmlcol
COLUMNS c_name varchar2(50) PATH 'Name',
c_value varchar2(1) PATH 'Value') atts
on c_name = 'PrimeSub' and c_value = 'Y'
;
Этот метод может показаться немного нелогичным, но Oracle рекомендует это сделать одним из способов.Вы присоединяете столбец XML как псевдотаблица с помощью функции XMLTable, превращая ее в реляционные данные, которыми легко манипулировать в SQL. Подробнее об этом можно прочитать здесь .