Контрольные вопросы и задания для самостоятельного выполнения
1. Повторите материалы данного шага.
2. Создайте секционированную таблицу, основанную на таблице AUTO, где данные бы распределялись по секциям времени, по годам.
Шаг 72. Работаем с XML в SQL
XML — это специальный расширяемый язык разметки. XML нашел широкое применение в сервисах обмена данными, в интернете, в RSS-сообщениях. Для работы с XML в ORACLE используется специальный тип данных XMLType, при помощи которого работа с XML-выражениями в ORACLE SQL становится максимально удобной и комфортной.
Для работы с XMLType в ORACLE SQL присутствует ряд дополнительных команд, применяемых для обработки XML-документа. Это команды EXTRACT, EXTRACTVALUE, XMLSEQUENCE.
Разберем работу с этими командами подробнее.
XMLTYPE — специальный тип данных, который позволяет программисту работать с XML-документом, не прибегая к XPath и парсингу строк.
Рассмотрим приемы работы с XMLTYPE.
Создадим таблицу из двух колонок.
Первая колонка — идентификатор, вторая колонка специального типа XMLType.
Добавим данные, идентификатор XML-документа, и непосредственно сам XML-документ.
Для доступа к XML-атрибутам используются две специальные функции VALUE и EXTRACTVALUE, продемонстрируем их работу на примере.
Извлекаем атрибут TO из колонки XMLTEST нашего примера:
Извлекаем остальные атрибуты из нашей таблицы из колонки XMLTEST:
Следующий пример демонстрирует получение внутреннего атрибута IDn, для этого в EXTRAСTVALUE используется специальная запись @nID.
SELECT ID, EXTRACTVALUE (XMLtest, «NOTe/@nID») FROM messages;
Преобразование строки XML-документа в XMLType.
Пример преобразования типов, также в данном запросе для наглядности используем оператор WITH, изучeнный нами ранее.
В этом примере, используя WITH, мы создали таблицу с одной строкой из XML-документа, воспользовавшись преобразованием XMLType.
А если нам необходимо преобразовать XML-документ в многострочную таблицу, то следует использовать конструкцию XMLSEQUENCE.
Преобразование XMLType в таблицу
XMLSEQUENCE возвращает XMLSEQUENCETYPE, отображает XML.
Следующий пример демонстрирует, как работать с XMLSEQUENCE для получения данных из XML в табличном виде.
В этом примере с помощью инструкции TABLE (XMLSEQUENCE (s. XMLTEST. extract (’messages/NOTe’))) мы создали таблицу, состоящую из XML-документа между тегами NOTE.
Пример
(
Alex
Tove
Re: Hey
Не забуду
)
Из которой извлекли соответствующие значения.
XMLTYPE появился в ORACLE начиная с версии 9.0, на более ранних версиях ORACLE приведенные в этом шаге команды работать не будут.
Кроме XMLType, какие существуют способы разбора в ORACLE SQL?
Можно использовать XPATH для разбора XML, но это менее удобный способ.
Контрольные вопросы и задания для самостоятельного выполнения
1. Создайте таблицу из двух колонок (ID NUMBER, XMLT XMLtype).
2. Внесите в таблицу следующий XML и ID = 1:
Dhirendra Brahmachari
1966
81-40-34319-4
Dhirendra Yoga Publications
11.50
J. KrIShnamurti
1954
0-06-064831-7
Harper & Row
2.95
3. Выберите из XML-документа следующую информацию: TITLE, AUTHOR, ISBN в табличном виде.
4. Выберите из данной таблицы CURRENCY при покупке книги.
Шаг 73. Сложные группировки SET GROUP CUBE
В ORACLE существуют конструкции для подведения подытогов и итогов групповых операций.
Это операции CUBE, ROLLUP.
Группировки ROOLUP, CUBE ROLLUP и CUBE — это специальные групповые опepации ORACLE.
Используются вместе с группировкой GROUP BY. Применяются начиная с версии ORACLE 8i.
ROLLUP — выражение, по которому подводятся итоги.
GROUPING — условное выражение, которое показывает, является ли строчка строчкой подведения итогов.
Очень удобно использовать ROLLUP CUBE при подведении итогов.
Рисунок 203. Пример использования группировок
Примеры
Попробуем вычислить, сколько имен начинаются с заданной буквы в таблице MAN.
Итоги нашей выборки подведем с помощью ROLLUP.
Рисунок 204. Пример использования ROLLUP
Второй пример:
Рисунок 205. Пример использования ROLLUP
Итак, функция ROLLUP подводит итоги по некоторой группе, некоторым сгруппированным значениям. В первом примере это первая буква имени, во втором примере — первые две буквы имени; GROUPING показывает, в какой именно строке подводился итог.
Группировка CUBE также используется для подведения итогов, очень похожа на ROLLUP, но подводит общий итог в конце выборки.
Читать дальше
Конец ознакомительного отрывка
Купить книгу