Раньше я писал простые запросы Oracle для извлечения данных XMLTYPE, но этот XML отличается - мне нужно извлекать информацию из атрибутов, дочерних элементов и их соответствующих атрибутов. Я также хотел бы написать инструкцию INSERT (желательно такую, которая может найти наивысшее значение параметра и добавить 1). Рассмотрим следующий XML:
<metadata>
<fields>
<field name="cusInt01" label="Reference point">
<option value="1">CB</option>
<option value="2">CF</option>
<option value="3">DF</option>
<option value="4">EKB</option>
<option value="5">ES</option>
<option value="6">GL</option>
<option value="7">GR</option>
<option value="8">KB</option>
<option value="9">KBE</option>
<option value="10">MSL</option>
<option value="11">PT</option>
<option value="12">RB</option>
<option value="13">RF</option>
<option value="14">RT</option>
<option value="15">UN</option>
<option value="16">UNK</option>
</field>
</fields>
</metadata>
Я могу написать, например, запрос для извлечения всех имен полей:
select
field_names.*
FROM
metadata m,
XMLTABLE('/metadata/fields/field'
PASSING xmltype(m.xml_string)
COLUMNS field_name VARCHAR(32) PATH '@name') field_names;
Как мне написать запрос, который может извлекать всю различную информацию в табличной форме? Как мне, например, отобразить это как:
field_name | field_label | option_value | option_label
cusInt01 Reference point 1 CB
cusInt01 Reference point 2 CF
cusInt01 Reference point 2 DF
... и т.д. Мысли? Я пытался составить запрос, но до сих пор крутит колеса.