КаталогИндекс раздела
НазадСодержаниеВперед


Выборка данных DB2 при помощи функций XQuery

В XQuery запрос может вызывать одну из следующих функций, чтобы получить входные данные XML из базы данных DB2: db2-fn:sqlquery и db2-fn:xmlcolumn.

Функция db2-fn:xmlcolumn выбирает один столбец XML, а db2-fn:sqlquery выбирает значения XML на основе полного запроса SQL.

db2-fn:xmlcolumn
        Функция db2-fn:xmlcolumn принимает в качестве аргумента литеральную строку, которая идентифицирует XML-столбец в таблице или в представлении, и возвращает последовательность значений XML, которые находятся в этой колонке. Аргумент этой функции чувствителен к регистру. Строковый литерал должен быть полным именем столбца типа XML. Эта функция позволяет вам выделить целый столбец данных XML без применения условия поиска.

В следующем примере запрос использует функцию db2-fn:xmlcolumn, чтобы получить все заказы из столбца PURCHASE_ORDER таблицы BUSINESS.ORDERS. Запрос затем обрабатывает эти входные данные, выделяя города из адреса доставки в этих заказах. Результатом запроса является список городов, куда доставляются заказы:

db2-fn:xmlcolumn('BUSINESS.ORDERS.PURCHASE_ORDER')/shipping_address/city
db2-fn:sqlquery
        Функция db2-fn:sqlquery принимает строковый аргумент, который представляет полный запрос и возвращает последовательность XML, которая является конкатенацией значений XML, возвращенных запросом. Полный запрос должен определять результат, состоящий из одного столбца, и столбец должен иметьтип данных XML. Применение полного запроса позволяет вам использовать всю мощь SQL для представления данных XML для XQuery.

В следующем примере таблица BUSINESS.ORDERS содержит XML-столбец PURCHASE_ORDER. Запрос в примере использует функцию db2-fn:sqlquery для вызова SQL, чтобы получить все заказы, дата которых - 15 июня 2005 г. Запрос затем обрабатывает эти входные данные, выделяя города из адреса доставки в этих заказах. Результатом запроса является список городов, куда доставляются заказы, сделанные 15 июня 2005 г.:

db2-fn:sqlquery("
SELECT purchase_order FROM business.orders 
WHERE ship_date = '2005-06-15' ")/shipping_address/city

Важно: Последовательность XML, которая возвращается функцией db2-fn:sqlquery или db2-fn:xmlcolumn, может содержать любые значения XML, включая атомарные значения и узлы. Эти функции не всегда возвращают последовательность правильно форматированных документов. Например, функция может возвращать единственное атомарное значение, такое как 36, как экземпляр типа данных XML.

SQL и XQuery имеют разные соглашения о чувствительности имен к регистру. Вы должны иметь в виду это различие при использовании функций db2-fn:sqlquery и db2-fn:xmlcolumn.

SQL - язык, нечувствительный к регистру
        По умолчанию все идентификаторы, которые используются в операторах SQL, автоматически преобразуются в верхний регистр. Следовательно, имена таблиц и столбцов SQL обычно являются именами в верхнем регистре, такими как BUSINESS.ORDERS и PURCHASE_ORDER в предыдущих примерах. В операторах SQL к этим столбцам можно обращаться, используя нижний регистр: business.orders и purchase_order, что автоматически преобразуется в верхний регистр при обработке оператора SQL. (Вы можете также создать в SQL имя чувствительное к регистру, называемое идентификатором с разделителями, заключив имя в кавычки.)
XQuery - язык, чувствительный к регистру
        XQuery не преобразует в именах нижний регистр в верхний. Это различие может привести к некоторой путанице, когда XQuery и SQL используются вместе. Строка, котоая передается в db2-fn:sqlquery, интерпретируется как запрос SQL и разбирается парсером SQL, который преобразует все именв в верхний регистр. Так, в примере db2-fn:sqlquery имя таблицы business.orders и имена столбцов purchase_order и ship_date могут быть в нижнем или в верхнем регистре. Операнд db2-fn:xmlcolumn, однако, не является запросом SQL. Операнд является чувствительным к регистру строеовым литералом XQuery, который представляет имя столбца. Поскольку настоящее имя столбца - BUSINESS.ORDERS.PURCHASE_ORDER, это имя в операнде db2-fn:xmlcolumn должно задаваться в верхнем регистре.

НазадСодержаниеВперед

КаталогИндекс раздела