пользователей: 30398
предметов: 12406
вопросов: 234839
Конспект-online
РЕГИСТРАЦИЯ ЭКСКУРСИЯ

Программирование в интернет:
» ПИ
» ОКГТМ
» КИНФС

Мова PL/SQL. Використання тригерів баз даних. Попередні умови. Іменування тригерів. Виведення інформації про тригери.

Триггер – это специальная процедура языка PL/SQL. Обычная процедура начинает выполняться после ее вызова специальной командой, триггер же начинает выполняться, когда происходит определенное событие с таблицей. Событиями, которые вызывают выполнение триггера, являются операции вставки, удаления или обновления, выполняемые командами INSERT, DELETE или UPDATE. Триггеры выполняются либо до, либо после выполнения этих команд. Различают два варианта триггеров: триггеры, которые выполняются при обращении команды к строке таблицы, триггеры, которые выполняются до (или после) выполнения всей команды.

Использование триггера: аудита (отслеживания) модификаций данных; прозрачной журнализации (регистрации) событий; реализации комплексных организационных правил; автоматического вычисления значений столбцов; осуществления сложных процедур защиты; поддержки дублированных таблиц; сбор статистики по обращениям к таблице предотвращения незаконных транзакций;

Просмотр информации про триггер: Вывод информации о триггерах.

Следующие обзоры(представления) словаря данных раскрывают информацию о триггерах: USER_TRIGGERS, ALL_TRIGGERS, DBA_TRIGGERS.

Просмотр типа триггера, к какой таблице относиться.

  • SELECT type, triggering_statement, table_name
  • FROM user_triggers
  • WHERE name = 'имя триггера';

Просмотр тела триггера.

  • SELECT trigger_body
  • FROM user_triggers
  • WHERE trigger_name = 'имя триггера';

Именование триггеров. Имена триггеров должны быть уникальными среди всех триггеров в той же схеме. Имена триггеров не обязаны быть уникальными по отношению к другим объектам схемы (таких как таблицы, обзоры, процедуры); например, таблица и триггер могут иметь одно и то же имя (хотя, во избежание путаницы, это не рекомендуется).

 

Стоит обратить внимание:

  • Для таблиц можно создать только BEFORE или AFTER триггеры. (INSTEAD OF триггеры допустимы только для представлений, если необходимо выполнять модификации представлений)
  • В определении триггера можно использовать ключевое слово OR для определения события. Для события UPDATE можно использовать опцию OF для определения списка столбцов таблица, при обновлении которых будет выполняться триггер.
  • Если указан параметр FOR EACH ROW, то триггер вызывается при каждом обращении к строке, в противном случае – при выполнении команды.
  • Если определен триггер для строки, то можно задать условия в опции WHEN, ограничивающие вызовы триггера. В условии не допустимы подзапросы. Если опция WHEN не указана, то триггер вызывается при каждом обращении к строке таблицы.
  • <тело_триггера> ­ это PL/SQL блок, а не последовательность SQL команд. В Oracle есть несколько ограничений на то, что можно разместить в <тело_триггера>. Эти ограничения связаны с ситуациями подобными: один триггер выполняет действие, которое приводит к выполнению другого триггера, выполнение которого, в свою очередь, приводит к вызову третьего триггера и т.о. организуется бесконечный цикл вызовов триггеров.

 

Ограничения на <тело_триггера>:

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

Использование специальных имен NEW и OLD позволяет ссылаться на новые и старые строки (кортежи) таблицы. Замечание: в теле триггера перед NEW и OLD размещается символ ":", а в WHEN условии – нет!

Команда CREATE TRIGGER завершается точкой и командой run;, как обычно в PL/SQL. Команда run; завершает создание триггера, но не вызывает его выполнение. Только событие, связанное с триггером, а именно вставка строки в таблицу Т4, вызовет его выполнение. 

Порядок активации триггеров в большинстве случаев таков:

  1. Выполняется операторный триггер BEFORE (при его наличии)
  2. Для каждой строки, на которую воздействует оператор:
    1. Выполняется строковый триггер BEFORE (при его наличии).
    2. Выполняется собственно оператор.
    3. Выполняется строковый триггер AFTER (при его наличии).
  3. Выполняется операторный триггер AFTER (при его наличии).

21.01.2016; 18:56
хиты: 78
рейтинг:0
для добавления комментариев необходимо авторизироваться.
  Copyright © 2013-2024. All Rights Reserved. помощь