Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
BD.doc
Скачиваний:
9
Добавлен:
22.04.2019
Размер:
507.9 Кб
Скачать
  1. Триггеры, их основные свойства и значение.

Триггер – это особого вида процедура, которая выполняется автоматически при возникновении некоторого события, указанного в спецификации триггера, - триггерного события (triggering event).

В PL/SQL можно создать триггеры, которые будут срабатывать в одной из следующих ситуаций:

  • применение оператора DML (INSERT, UPDATE, DELETE) к определенному объекту схемы;

  • применение оператора DDL (CREATE, ALTER, DROP) внутри схемы или базы данных;

  • вход пользователя в систему или выход его из системы, ошибка сервера, запуск базы данных или останов базы данных.

  • Триггеры нельзя вызывать напрямую из кода программы. Oracle вызывает их автоматически в ответ на определенное событие.

  • Триггеры используются для реализации сложных бизнес-правил. Например, триггер может проверять, истек ли срок продаваемого товара к моменту осуществления сделки продажи, или нет. Если истек, то триггер может выполнять некоторые автоматические действия по предотвращению продажи данного товара.

  • Триггеры могут обеспечивать прозрачное протоколирование событий, например, отслеживать сколько раз каждый из пользователей обращался к определенной таблице.

Типы триггеров

Момент_срабатывания определяет, когда будет срабатывать триггер: до (BEFORE), после (AFTER) и вместо (INSTEAD OF) наступления триггерного события (выполнения запускающего оператора).

Если указано значение BEFORE, триггер выполняется до каких-либо проверок ограничений на строки, затрагиваемые триггерным событием. Никакие строки не блокируются. Триггер этого типа называется, соответственно, BEFORE-триггером (BEFORE trigger).

Если выбрать ключевое слово AFTER, то триггер будет срабатывать после того, как запускающий оператор завершит свою работу и будут выполнены проверки всех ограничений. В этом случае затрагиваемые строки блокируются на время выполнения триггера. Триггер этого типа называется AFTER-триггером (AFTER trigger).

Триггеры INSTEAD OF применяются только для представлений (VIEW). Проблема состоит в том, что операторы DML не применимы к представлениям. Нельзя добавлять, изменять или удалять записи из представлений. Триггеры INSTEAD OF вызываются вместо выполнения DML-выражений. Если вы выполните оператор DML к представлению, то в соответствующем триггере можно выполнить какие-либо действия, и тогда у пользователя создастся впечатление, что он работает с таблицей.

Триггерное_событие может принимать значения INSERT, UPDATE или DELETE.

Различным триггерные события можно комбинировать с помощью оператора OR. Например:

DELETE OR INSERT остальные_операторы

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

UPDATE OF столбец_1, столбец_2, ...

Пример триггера

Триггер, который будет запрещать изменение имени менеджера (поле NAME).

CREATE OR REPLACE TRIGGER onManagersUpdate

BEFORE UPDATE OF name ON Managers

FOR EACH ROW

DECLARE

cant_change_name EXCEPTION;

BEGIN

IF :new.name<>:old.name THEN

RAISE cant_change_name;

END IF;

EXCEPTION

WHEN cant_change_name THEN

dbms_output.put_line(`Нельзя изменить имя менеджера`);

:new.name:=:old.name;

END;

/

Данный триггер не позволит изменить значение поля NAME в таблице MANAGERS. При попытке сделать это сработает триггер, внутри которого производится сравнение старого значения и нового значения поля NAME. Если они различаются, то активизируется исключение, при обработке которого на экране появится соответствующее сообщение

Удаление триггеров, также как и удаление всех остальных объектов СУБД Oracle, осуществляется посредством оператора DROP:

DROP имя_триггера;

Если по каким-то причинам триггер нужно на время отключить, то это можно сделать при помощи команды ALTER TRIGGER имя_триггера DISABLE;

Обратное включение триггера осуществляется при помощи команды ALTER TRIGGER имя_триггера ENABLE;

Поскольку с одной таблицей могут быть связаны несколько триггеров, то бывает необходимо отключить сразу все эти триггеры. Это делается при помощи команды ALTER TABLE имя_таблицы DISABLE ALL TRIGGERS;

Включение всех триггеров осуществляется командой ALTER TABLE имя_таблицы ENABLE ALL TRIGGERS;

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]