Документация Oracle на русском языке





Сайт посвящен разработке информационных систем с использованием технологий Oracle. На сайте можно найти полезную литературу и документацию на русском языке по программированию и администрированию Oracle.Программирование баз данных на Oracle, техническая документация, литература, статьи и публикации.

Главная :: Карта


Oracle Database или Oracle RDBMS — объектно-реляционная система управления базами данных компании Oracle.



 

DeepEdit!

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

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

Окончательная функция

Теперь, когда все составляющие части имеются, взглянем еще раз на
псевдокод нашей функции.

Полностью код функции доступен на сайте этой книги в файле re-
peat_orders.sql.
Выполнение функции
Функция выполняется в SQL-операторе SELECT, который передает ей другой оператор SELECT. Я понимаю, что это может потребовать определенного навыка, но поверьте - оно того стоит. Вот код SQL, вызывающий эту функцию:



1
1
1
2
2
2
2
3
3
3
3
4
4
4
4
5
4
4
4
5
5
5
5
6
6
6
6
7
7
7
7
8
8
8
8
9
9
9
9
10
10
10
10
11



Результирующее множество обрабатывается так же, как если бы было получено из таблицы или представления Oracle. Оно может быть ограничено условиями, например «WHERE first_type_id = 3». Еще более ценно здесь то, что результаты некоего замысловатого бизнес-процесса можно получить простым SQL-запросом, позволяющим легко строить отчеты. Вся бизнес-логика, осуществляющая отбор записей, реализуется в базе данных.
Конвейеризация функции позволяет обрабатывать записи в процессе их поступления, сберегая еще больше драгоценного времени.
Функция суммирования
Теперь напишем еще одну табличную функцию для суммирования повторных нарядов по регионам, а затем встроим ее в SQL-код из предыдущего раздела. Новая функция выглядит так:


Алгоритм состоит из простого цикла по выбранным повторным нарядам, в котором они суммируются по регионам. Как только в наряде меняется значение идентификатора региона, результат отправляется в конвейер.
Функция суммирования вызывается из оператора SELECT, как показано ниже.


Представленный здесь способ (использование нескольких табличных функций) иллюстрирует упоминавшуюся выше технологию вложения (или организации цепочки) табличных функций. Работа распределяется между несколькими функциями, передающими результаты по цепочке, запись за записью, пока не будет собрано окончательное результирующее множество. С учетом параллельного режима работы этих функций выгода от использования табличных функций становится очевидной.
Примеры табличных функций
В этом разделе приведен ряд дополнительных примеров, демонстрирующих удобство использования табличных функций в таких задачах, как дополнительная трассировка, установка временных ограничений и периодическое обновление данных. Во всех примерах используется такое полезное свойство табличных функций, как возможность разместить код в операторе SELECT.
Трассировка
Большинство средств трассировки PL/SQL (SQL Trace, DBMS_TRACE и т. п.) устроены так, что после выполнения операции вам надо где-то искать результаты трассировки. Даже пакет Oracle DBMS_OUTPUT (простейший отладочный инструмент) требует отдельного места для вывода при использовании средств разработки типа Toad или PL/SQL Developer.
Табличные функции позволяют включать отладочную информацию в результаты запроса. В сочетании с автономными транзакциями они помогают трассировать даже операции DML. Рассмотрим следующую функцию:


Без предложения AUTONOMOUS TRANSACTION мы получили бы при выполнении запроса ошибку «ORA-14551: cannot perform a DML operation inside a query» (невозможно выполнить операцию DML внутри запроса). Если это предложение присутствует, функцию можно выполнить из оператора SELECT.

Установка временных ограничений

Табличные функции могут быть очень полезны при установке ограничения на время выборки записей запросом. Это удобно, если вы хотите протестировать свое приложение на некотором подмножестве записей и не хотите ждать, пока будет выбран полный список. Следующая функция передает полученные запросом данные в конвейер в течение заданного параметром количества секунд. Как только заданное время истекает, возвращается значение -1 и функция завершается.

Если запрос требует для выполнения больше времени, чем p_limit секунд, то функция выйдет за пределы лимита времени.
Вот пример выборки из таблицы, содержащей 1000 записей:
 



jAntivirus