Выбрать главу

дают возможность своим покупателям пересылать заказы в виде

XML файлов по сети Интернет.

В базе данных Oracle 9i появилась возможность хранения XML в базе

данных вместе с расширенной функциональностью для управления и обработки

XML. В базе данных Oracle 10g версии 2 добавлены дополнительные

функции для создания XML. В Oracle 1 lg добавлены такие возможности,

как обработка с помощью языков Java и С двоичных файлов XML (двоичный

XML обеспечивает более эффективное хранение и управление

XML, хранящимся в базе данных). Эта глава сфокусирована на полезном

подмножестве XML возможностей базы данных Oracle.

Если вы новичок в XML, то найдете полезную информацию на сайтах:

■ http: / / www.w3.org/XML

■ http: / /www.wikipedia.org/wiki/XML

Создание XML из реляционных данных

В базе данных Oracle существует несколько функций SQL, которые можно

использовать для создания XML. В этом разделе мы рассмотрим, как создавать

XML из реляционных данных, применяя некоторые из этих функций.

XML и база данных Oracle 625

XMLELEMENT()

Функция XMLELEMENT() используется для создания элементов XML из реляционных

данных. Вы передаете в качестве параметра имя элемента, а также

столбец, который нужно выбрать в качестве XML элемента в

ХМLELEMENT( ) , и она возващает элементы как объекты типа ХМЕГуре. Тип

XMLType является встроенным типом данных базы данных Oracle, используемым

для представления данных XML. По умолчанию объект XMLType

хранит данные XML как текст в CLOB (character large object, большой символьный

объект).

В следующем примере демонстрируется подключение к базе банных

пользователя store и получение значений столбца custome r_id в виде объектов

XMLType:

□ CONNECT store/store_password

SELECT XMLELEMENT(” customer_id” , customer_id)

AS xml_customers

FROM customers;

XML_CUSTOMERS

<customer_id>1</customer_id>

<customer_id>2</customer_id>

<customer_id>3</customer_id>

<customer_id>4</customer_id>

<customer_id>5</customer_id>

Как видно из приведенного примера, XMLELEMENT(“customer_id” , custom

e r^ ) возвращает данные customer_id с тэгом customer_id. Можно использовать

любой тэг, как показано в следующем примере, который использует

тэг “cust_id”:

□ SELECT ХМLELEMENT( ”cust_id” , customer_id)

AS xml_customers

FROM customers;

XML_CUSTOMERS

<cust_id>1</cust_id>

<cust_id>2</cust_id>

<cust_id>3</cust_id>

<cust_id>4</cust_id>

<cust_id>5</cust_id>

В следующем примере выбираются значения first_name и dob для покупателя

№2:

□ SELECT XMLELEMENT( ” first_name” , first_name) || XMLELEMENT(’’dob” , dob)

AS xml_customers

FROM customers

WHERE customer_id = 2;

XML_CUSTOMER

<first_name>Cyntia</first_name><dob>1968-02-05</dob>

626 Глава 17

Следующий пример использует функцию T0_CHAR() для изменения формата

данных значения dob:

□ SELECT XMLELEMENT(”dob” , T0_CHAR(dob, ' MM/DD/YYYY’ ) )

AS xml_dob

FROM customers

WHERE customer_id = 2;

XML_D0B

<dob>02/05/1968</dob>

Следующий пример встраивает два вызова XMLELEMENT( ) во внешний вызов

XMLELEMENT( ) ; заметим, что возвращаемые элементы custome r_id и name

содержатся внутри внешнего элемента customer:

□ SELECT ХМLELEMENT(

"customer” ,

XMLELEMENT(”customer_id” , customer_id),

XMLELEMENT(“name", first_name | | ‘ ‘ I I last_name)

) AS xml_customers

FROM customers

WHERE customer_id IN (1, 2);

XML_CUSTOMERS

<customer>

<customer_id>1</customer_id>

<name>John Brown</name>

</customer>

<customer>

<customer_id>2</customer_id>

<name>Cyntia Green</name>

</customer>

Примечание Автор добавил несколько разрывов страницы и пробелов в XML, возвращаемый

этим запросом, чтобы улучшить читаемость XML. В некоторых других примерах этой главы

сделано тоже самое. _________ _____________________________

Можно также выбирать обычные реляционные данные вместе с XML,

что показано в следующем примере, который выбирает столбец custome г_

id как обычный реляционный результат, и соединенные вместе столбцы

first_name и last_name, как элементы XML:

□ SELECT customer_id,

XMLELEMENT(”customer” , first_name || ‘ ‘ I I last_name) AS xml_customer

FROM customers;

CUSTOMER_ID XML_CUSTOMERS

1 <customer>John Brown</customer>

2 <customer>Cynthia Green</customer>

3 <customer>Steve White</customer>

4 <customer>Gail Black</customer>

5 <customer>Dorean Blue</customer>

XML и база данных Oracle 627

Вы можете создавать XML для объектов базы данных, как показано в

следующем примере, в которым устанавливается соединение от имени

object_user и выбираются столбцы id и address для покупателя №1 в таблице

customers (столбец address хранит объект типа t_address):

П CONNECT object_user/object_password

SELECT XMLELEMENT(” id ” , id) || XMLELEMENT(”address” , address)

AS xml_object customer

FROM object_customers

WHERE id = 1;

XML_OBJECT_CUSTOMERS