DeepEdit!

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

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

Отсутствие режима Read Committed

Может быть, SELECT просто завершится с ошибкой?
Несмотря на то что табличные функции выполняются внутри оператора SELECT, они в ходе выполнения не могут воспользоваться преимуществами используемой в Oracle архитектуры «read-committed» (чтение только зафиксированных данных). Любым запросам, выполняемым внутри табличной функции, режим «read-committed» доступен, но сами табличные функции в этом отношении работают так же, как и любые другие функции. Рассмотрим такую табличную функцию:


Она запрашивает количество строк в таблице ORDERS, ждет 10 секунд и повторяет запрос, возвращая результирующее множество из этих двух значений. Если вы выполните эту функцию в одном сеансе, затем удалите (и зафиксируете удаление) 5 заказов в другом сеансе (предположим, это происходит в рассматриваемом 10-секундном интервале), то получите следующие результаты:

Имейте в виду эту особенность, когда будете выбирать между табличными функциями и запросами. Если вы считаете, что доступ в режиме «read-committed» принципиально важен, то, возможно, от табличных функций лучше отказаться.
Заключение
Когда вы используете табличную функцию, программа становится таблицей. Что я хочу этим сказать? Фактически программа (ваша табличная функция) выступает в роли источника данных, к которому адресуются запросы, - в точности, как к таблице. Табличные функции отлично подходят для случаев, когда сложная логика должна выполняться непосредственно в операторе SELECT, что часто бывает при взаимодействии Oracle со сторонними приложениями. Объединение этой возможности с мощью параллельного выполнения табличных функций позволяет получить прекрасный инструмент для администраторов баз данных.
 









jAntivirus