Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Answers v.0.6.docx
Скачиваний:
6
Добавлен:
26.09.2019
Размер:
244.13 Кб
Скачать

13. Триггеры, их основные свойства и значение.

Триггер — особого вида процедура, которая выполняется автоматически при возникновении события, указанного в спецификации триггера — триггерного события (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 применяются только для представлений. Проблема состоит в том, что операторы DML не применимы к представлениям. Нельзя добавлять, изменять или удалять записи из представлений. Триггеры Instead of вызываются вместо выполнения DML-выражений. Если вы выполните оператор DML к представлению, то в соответствующем триггере можно выполнить какие-либо действия, и тогда у пользователя создастся впечатление, что он работает с таблицей.

Триггерное событие мб = Insert, Update, Delete.

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

При использовании Update можно указать список столбцов, при изменении которых будет срабатывать триггер: Update of <столбец1>[,<столбец2>,…].

Триггер, запрещающий изменять имя менеджера:

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 сработает триггер, кот. сравнивает старое и новое значения поля Name. Если они различаются, то активизируется исключение, при обработке которого на экране появится соответствующее сообщение

Удаление: Drop Trigger <имя_триггера>;

Alter Trigger <имя_триггера> Disable; — Отключение триггера.

Alter Table <имя_таблицы> Disable All Triggers; — Отключение всех триггеров, связанных с таблицей.

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