дают возможность своим покупателям пересылать заказы в виде
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