) AS xml_customer
FROM dual;
XML_CUSTOMER
<customer>
<customer_id>1</customer_id>
<name>John Brown</name>
</customer>
Примечание На странице http://www.w3.org/TP/REC-xml можно найти более подробную информацию
о хорошо сформированных XML документах и значениях.
XMLPI()
XMLPI() используется для создания инструкции обработки XML. Инструкция
обработки обычно используется для того, чтобы передать приложению
634 Глава 17
информацию, связанную с XML данными. Приложение может в дальнейшем
использовать инструкцию обработки для определения того, как обрабатывать
XML данные.
В следующем примере создается инструкция обработки для статуса заказов.
П SELECT XMLPI(
NAME “order_status” ,
‘ PLACED, PENDING, SHIPPED’
) AS xml_order_status_pi
FROM dual;
XML_ORDER_STATUS_PI
<?order_status PLACED, PENDING, SHIPPED?>
В следующем примере создается инструкция обработки для показа XML
документа с использованием файла по имени example.css, содержащего
каскадную таблицу стилей:
П SELECT XMLPI(
NAME “xml-stylsheet” ,
‘ type=”text/css” href=” example.css"’
) AS xml_stylesheet_pi
FROM dual;
XML_STYLESHEET_PI
<?xml-stylesheet type=”text/css” href=”example.css”?>
XMLCOMMENT()
XMLCOMMENTO создает комментарий XML в виде текстовой строки, заключенной
в <!- и ->. Например:
□ SELECT XMLCOMMENT(
‘ An example XML Comment’
) AS xml_comment
FROM dual;
XML_COMMENT
< !--An example XML Comment-->
XMLSEQUENCE()
XMLSEQUENCE() используется для создания объекта типа XMLSequenceType,
который представляет собой массив переменной длины объектов типа
XMLType. Поскольку XMLSEQUENCE() возвращает массив переменной длины,
то ее можно использовать в выражении FROM запроса. Например:
П SELECT VALUЕ(lis t_o f_va lu e s ).GETSTRINGVAL( ) order_values
FROM TABLE (
XMLSEQUENCE(
XML и база данных Oracle 635
EXTRACT(
XMLType(1 <A><B>PLACED</B><B>PENDING</B><B>SHIPPED</BX/A>’ ),
7A/B/’
)
))
list_of_values;
ORDER_VALUES
<B>PLACED</B>
<B>PENDING</B>
<B>SHIPPED</B>
Давайте подробно разберем этот пример. Вызов к XMLType() представляет
собой
□ XMLType(' <A><B>PLACED</B><B>PENDING</BXB>SHIPPED</В></А>’ )
Этот вызов создает объект, содержащий XML:
□ <A><B>PLACED</BXB>PENDING</B><B>SHIPPED</B></A>
Вызов функции EXTRACT представляет собой:
□ EXTRACT(
Хш1Туре(' <AXB>PLACED</BXB>PENDING</BXB>SHIPPED</BX/A>'),
‘ /А /В / ’
)
EXTRACT ( ) выбирает данные XML из объекта XMLType, возвращаемого
посредством вызова XMLType(). Второй параметр EXTRACT( ) представляет
собой строку XPath. XPath - это язык, предназначенный для доступа к указанным
элементам в данных XML. Например, в предыдущем вызове
EXTRACT ( ) , ’ /А/В ’ возвращает все элементы В, которые являются дочерними
элементами элементов А. Таким образом, функция EXTRACT( ) возвратит
следующее:
□ <B>PLACED</B>
<B>PENDING</B>
<B>SHIPPED</B>
Вызов XMLSEQUENCE() в приведенном примере просто возвращает массив
переменной длины, содержащий элементы, полученные при помощи
EXTRACT(). TABLE() преобразует массив переменной длины в строки таблицы
и применяет псевдоним list_of_VALUES к данной таблице. Оператор
SELECT выбирает значения строк, имеющие тип данных «строка», в эту таблицу
при помощи GETSTRINGVAL().
Позже в этой главе будет рассмотрено больше примеров использования
EXTRACT( ) и XPath.
XMLSERIAUZEO
XMLSERIALIZE() используется для создания из полученного результата выражения
представления данных XML в виде строки или объекта L0B (большого
объекта). Перед выражением необходимо указать один из параметров:
636 Глава 17
■ CONTENT - этот параметр означает, что выражение должно возвращать
корректное значение XML;
■ DOCUMENT - этот параметр означает, что выражение должно возвращать
XML документ с одним корневым узлом.
В следующем npHMepeHcmwib3yeTcaXMLSERIALIZE() с параметром CONTENT
для создания значения XML:
□ SELECT XMLSERIALIZE(
CONTENT XMLType ( ' <order_status>SHIPPED</order_status>’ )
) AS xml_order_status
FROM DUAL;
XML_ORDER_STATUS
<order_status>SHIPPED</order_status>
В следующем примере используется XMLSERIALIZE() с параметром
DOCUMENT для создания документа XML, возвращаемого в виде CL0B (большой
символьный объект):
□ SELECT XMLSERIALIZE(
CONTENT XMLType ( ' <description>Description of a product</description>’ )
) AS xml_product_description
FROM DUAL;
XML_PRODUCT_DESCRIPTION
<description>Description of a product</description>
Пример записи данных XML в файл на PL/SQL
В данном разделе мы рассмотрим законченный пример на PL/SQL для записи
имен покупателей в файл XML. Прежде всего, вам необходимо подключиться
к базе данных с правами привилегированного пользователя