Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
32
Добавлен:
17.04.2018
Размер:
103.42 Кб
Скачать

Модификация триггеров

Для триггеров, как и для представлений, не существует команды модификации. Старый триггер просто заменяется новым с помощью команды CREATE OR REPLACE TRIGGER.

Триггер можно удалить командой со следующим синтаксисом:

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

Существующие триггеры можно деактивизировать и повторно активизировать, используя команды с таким синтаксисом:

ALTER TRIGGER имя_триггера DISABLE;

ALTER TRIGGER имя_триггера ENABLE;

Особенности использования триггеров

Собираясь использовать триггеры, необходимо учитывать следующее:

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

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

  • в триггере, который запускается оператором UPDATE, можно обращаться к старым и новым значениям столбцов. Это касается как BEFORE-, так и AFTER-триггеров;

  • в триггере, который запускается оператором DELETE, имеет смысл обращаться только к старым значениям столбцов. Поскольку удаленная строка перестает существовать, новым значением всегда будет NULL. Однако значения :new нельзя модифицировать. Если попытаться это сделать, будет выдано сообщение об ошибке ORA-4084;

  • в теле триггера нельзя использовать операторы ROLLBACK, COMMIT и SAVEPOINT;

  • при возникновении необрабатываемых исключений производится откат всех изменений, включая те, которые были выполнены запускающим оператором;

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

  • когда триггер пытается прочитать таблицу, а затем записать в нее данные, возбуждается исключение "мутирующей таблицы". Хотя намерение ограничить действия такого типа вполне объяснимо, корпорация Oracle зашла в этом дальше, чем необходимо, запретив операции, при которых таблица просто блокируется, а не изменяется. Один из способов обойти эту проблему заключается в том, чтобы создать вторую таблицу с копиями столбцов, которые триггер должен прочитать из главной таблицы. В этом случае триггер получает необходимые значения из второй таблицы, а затем выполняет запланированные действия с первой таблицей. При реализации данного подхода важно обеспечить синхронизацию таблиц. Для этого все операции INSERT, UPDATE и DELETE над главной таблицей должны отражаться триггером на второй таблице.

Соседние файлы в папке Lab5