DeepEdit!

Программирование баз данных на Oracle, техническая документация, литература, статьи и публикации

  • Увеличить размер шрифта
  • Размер шрифта по умолчанию
  • Уменьшить размер шрифта

Вложенные табличные функции

Вложением табличных функций называется такой способ их выполнения, при котором результат работы первой из них передается для дальнейшей обработки в следующую, затем ее результат - в следующую функцию и т. д. Такой способ иногда называют «гирляндой», или «цепочкой» (daisy-chaining). В сочетании с конвейеризацией вложение табличных функций образует исключительно мощный механизм для использования в ETL-процессах.
Покажем это на примере функции, принимающей результаты выполнения нашей табличной функции date_parse посредством курсора и выполняющей действия над ними. Чтобы не запутывать дело сложными ETL-преобразованиями, ограничимся простым сложением полученных значений order_number, year, quarter и month. Вот эта функция.

Большинство синтаксических конструкций этого примера мы уже рассматривали. Новым является только синтаксис, используемый для вложения функций:

Благодаря удачному форматированию они даже выглядят вложенными, это видно по расположению ключевых слов TABLE и CURSOR. В двух словах этот пример делает следующее: вызывает функцию date_parse, которая передает результаты функции next_in_line, которая передает их во внешний мир.
Распараллеливание табличных функций
Включение функций в парадигму оператора SELECT позволяет воспользоваться преимуществами еще одной особенности Oracle - параллельного выполнения запросов.
В Oracle уже давно обеспечен параллелизм как средство работы с большими запросами, позволяющее распределить обработку между несколькими PQ-серверами (Parallel Query - параллельные запросы), каждый из которых рассчитывает свою часть результата; затем данные собираются в единое результирующее множество. Внутренние механизмы Oracle определяют, как распределить работу между имеющимися PQ- серверами, чтобы получить наилучший результат. Администратор базы данных может влиять на процесс принятия решения, устанавливая степени параллелизма для таблиц или создавая специальные схемы секционирования, но, в конечном счете, наилучший способ выполнения запроса выбирает сервер Oracle.
 









jAntivirus