Oracle обладает мощными инструментами для работы с XML. Чтобы их задействовать, ваш XML-текст должен быть помещен в переменную с типом XMLType. В данной статье способы получения таких переменных подробно рассматриваться не будут, а будет произведено простейшее преобразование строки с XML.
Допустим у вас имеется переменная с типом XMLType и вы хотели бы использовать ее в SQL запросах. Получение табличных данных из такой переменной возможно через оператор XMLTABLE. Вот пример такого запроса:
SELECT p.*
FROM XMLTABLE ( 'root/t'
PASSING (XMLTYPE('
<root>
<t id="1">Data 1</t>
<t id="2">Data 2</t>
<t id="3">Data 3</t>
<t id="4">Data 4</t>
</root>
'))
COLUMNS
clId NUMBER PATH '@id',
clText VARCHAR2(255) PATH 'text()'
) p
* Первый параметр — это строка XPath, которая задает nodes XML, которые будут выбираться из пакета.
* Второй параметр (через ключевое слово PASSING) содержит переменную с типом XMLType, часть содержимого которой вы хотите получить в виде таблицы. В нашем переменная создается через конструктор XMLTYPE просто из текстовой строки.
* Третий параметр COLUMNS описывает колонки таблицы и пути к ним. Обратите внимание, на то, что через символ @ можно получить доступ к атрибутам тэга (node XML), а через функцию text() можно получить содержимое тэга.
Результат выглядит примерно так: