среда, 4 марта 2015 г.

Поиск по полям XMLType в Oracle

Допустим у нас есть таблица table_name, в которой есть поле id и поле xml_file типа XMLType, в котором лежит собственно xml.

Структура xml достаточно сложная.


Пусть будет такая:
<file>
 <company id="1">
  <parms>
   <param>
    <field id="blabla1" />
    <field id="blabla2" />
   </param>
   <param>
    <field id="blabla3" />
    <field id="blabla4" />
   </param>
  </parms>
 </company>
 <company id="2">
  <parms>
   <param>
    <field id="blabla5" />
    <field id="blabla6" />
   </param>
   <param>
    <field id="blabla7" />
    <field id="blabla8" />
   </param>
  </parms>
 </company>
</file>

Нужно найти все записи, в xml которых в теге field значение атрибута равно 'blabla7'.

Для этого можно использовать такой запрос:
with t as (select id, xml_file from table_name )
select id, xml_file,  X.* from t,
XMLTABLE ('$d/file/company/parms/param/field' passing xml_file as "d"
COLUMNS         
         fieldId VARCHAR2(50) path '@id'        
) as X where fieldId = 'blabla7'

Комментариев нет:

Отправить комментарий