В начале пути работы с XML / Oracle / rpilot62.ru

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() можно получить содержимое тэга.

Результат выглядит примерно так:

Комментарии к записи Oracle, XML, SQL запрос к переменной с типом XMLType отключены

Результаты SQL-запроса в формате XML

Статьи про Oracle -> Программирование

Результаты SQL-запроса в формате XML

v:1.0 26.12.2010
Петрелевич Сергей

Часто результаты sql-запроса надо представить в формате XML. Для этого в Oracle есть несколько средств. Рассмотрим одно из них.

Данные будем брать из этой таблицы

create table tXML ( Id number, Name varchar2(100), constraint PK_tXML primary key (Id) ); insert into tXML(Id,Name) values(1,’Name1′); insert into tXML(Id,Name) values(2,’Name2′); insert into tXML(Id,Name) values(3,’Name3′); insert into tXML(Id,Name) values(4,’Name4′); insert into tXML(Id,Name) values(5,’Name5′); insert into tXML(Id,Name) values(6,’Name6′); insert into tXML(Id,Name) values(7,’Name7′); insert into tXML(Id,Name) values(8,’Name8′); insert into tXML(Id,Name) values(9,’Name9′); insert into tXML(Id,Name) values(10,’Name10′);

таким запросом

select xmlelement(«document», xmlattributes(‘testId’ as «DocumentID»), xmlagg( xmlelement(«row», xmlforest(t.Id «Id», t.Name «Name»)) ) ) as XMLresult from tXML t

В результате получим XMLType со следующим XML-документом:

Дам краткие пояснения по запросу.
XMLforest преобразует свои параметры в XML-элементы, полученные кусочки объединяет в итоговый XML-фрагмент. Если бы вместо него использовать два XMLelement’а для полей Id и Name, то на выходе вместо одной объединенной стоки получилось бы два отдельных столбца.
XMLelement создает из своих параметров XML-элемент.
XMLagg агрегирует (группирует) полученные фрагменты XML в итоговый XML-документ.
XMLattributes добавляет атрибут в XML-элементу.

А теперь все тоже самое, но по шагам.

Запрос:

select XMLelement(«Id»,t.Id) as Id, XMLelement(«Name»,t.Name) as Name from tXML t;

В результате две отдельных колонки, в каждой по XML-элементу:

Id Name <Id>1</Id> <Name>Name1</Name> <Id>2</Id> <Name>Name2</Name> <Id>3</Id> <Name>Name3</Name> <Id>4</Id> <Name>Name4</Name> ….

Запрос:

select XMLforest(t.Id as «Id», t.Name as «Name») as Result from tXML t;

В результате одна колонка, в которой объединены XML-элементы:

RESULT <Id>1</Id><Name>Name1</Name> <Id>2</Id><Name>Name2</Name> <Id>3</Id><Name>Name3</Name> <Id>4</Id><Name>Name4</Name> ….

Запрос:

select XMLelement(«Row», XMLforest(t.Id as «Id», t.Name as «Name»)) as Result from tXML t;

В результате отдельные XML-элементы формируются в XML-структуры:

RESULT <Row><Id>1</Id><Name>Name1</Name></Row> <Row><Id>2</Id><Name>Name2</Name></Row> <Row><Id>3</Id><Name>Name3</Name></Row> <Row><Id>4</Id><Name>Name4</Name></Row> ….

Запрос:

select XMLagg( XMLelement(«Row», XMLforest(t.Id as «Id», t.Name as «Name»))) as Result from tXML t;

В результате отдельные XML-структуры объединяются в единый XML-документ:

RESULT (фактически это одна строка, отформатированная для лучшего восприятия) <Row> <Id>1</Id><Name>Name1</Name> </Row> <Row> <Id>2</Id> <Name>Name2</Name> </Row> <Row> <Id>3</Id> <Name>Name3</Name> </Row> <Row> <Id>4</Id> <Name>Name4</Name> </Row>….

Запрос:

select XMLelement(«document», XMLattributes(‘testID’ as «DocumentID»), XMLagg( XMLelement(«Row», XMLforest(t.Id as «Id», t.Name as «Name»)))) as Result from tXML t;

В результате добавляется корневой элемент с атрибутом и получается законченный XML-документ:

RESULT (фактически это одна строка, отформатированная для лучшего восприятия) <document DocumentID=»testID»> <Row> <Id>1</Id> <Name>Name1</Name> </Row> <Row> <Id>2</Id> <Name>Name2</Name> </Row> <Row> <Id>3</Id> <Name>Name3</Name> </Row> <Row> <Id>4</Id> <Name>Name4</Name> </Row>…. </document>

Все довольно-таки просто. Для формирования XML в Oracle есть все необходимое.

Метки: XML   SQL  

Внимание.
Комментировать могут только зарегистрированные пользователи.
Возможно использование следующих HTML тегов: <a>, <b>, <i>, <br>.

Цитата:

Новичок: Подскажите пожалуста самый крепкий сорт дерева! Весь инет перерыл, поиском пользовался!
Старожил: Объясни, зачем тебе понадобилось дерево? Сейчас оно в строительстве практически не используется.
Новичок: Я небоскрёб собираюсь строить. Хочу узнать, из какого дерева делать перекрытия между этажами!
Старожил: Какое дерево? Ты вообще соображаешь, что говоришь?
Новичок: Чем мне нравиться этот форум — из двух ответов ниодного конкретного. Одни вопросы неподелу!
Старожил: Не нравится — тебя здесь никто не держит. Но если ты не соображаешь, что из дерева небоскрёбы не строят, то лучше бы тебе сначала школу закончить.
Новичок: Не знаите — лучше молчите! У меня дедушка в деревянном доме живёт!

У НЕГО НИЧЕГО НЕ ЛОМАЕТСЯ!!!
Но у него дом из сосны, а я понимаю, что для небоскрёба нужно дерево прочнее! Поэтому и спрашиваю!!! А от вас нормального ответа недождёшся!!!
Прохожий: Самое крепкое дерево — дуб. Вот тебе технология вымачивания дуба в солёной воде, она придаёт дубу особую прочность:
Новичок: Спасибо, братан! То что нужно!!!

http://phpfaq[dot]ru/humor


Отредактировано модератором: Uchkuma, 26 Апреля, 2011 — 10:21:12

Добавить комментарий

Закрыть меню