Тип данных XML в столбце для поиска существующих значений - PullRequest
0 голосов
/ 27 сентября 2018

У меня проблемы с поиском строк в таблице, имеющих тип данных как XMLType, и я ищу Имя 'PrimeSub' и Значение как 'Y'.Спасибо

<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>

1 Ответ

0 голосов
/ 27 сентября 2018

Вы не опубликовали имя или структуру таблицы, поэтому здесь я использую 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. Подробнее об этом можно прочитать здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...