Составители:
Рубрика:
ГУАП МЦИТ
Введение в «ORACLE»
Под ред. проф. В.М.Космачёва
69
Чтобы создать триггер, необходимо иметь системные привилегии CREATE TRIGGER. Для создания триггера в схеме,
отличной от текущей схемы пользователя, требуются системные привилегии CREATE ANY TRIGGER.
Синтаксис оператора определения триггера:
CREATE [OR REPLACE] TRIGGER [схема.]имя_триггера
{BEFORE | AFTER}
{INSERT | DELETE | UPDATE [OF имя_столбца[,имя_столбца...]]}
[OR {INSERT | DELETE | UPDATE [OF имя_столбца[,имя_столбца...]]}...]
ON [схема.]{имя_таблицы | имя_представления}
[FOR EACH ROW] [WHEN условие]
спецификации_пакета_на_PL/SQL
Ключевое слово OR REPLACE указывает на безусловное замещение старого текста триггера. Если ключевое слово OR
REPLACE не указано, и триггер определен в системе, то замещения старого значения триггера не происходит, и
озвращается сообщение об ошибке.
Ключевые слова BEFORE или AFTER указывают на выполнение кода триггера либо до, либо, соответственно, после
операторов манипулирования данными, инициировавших запуск триггера.
Ключевые слова INSERT, DELETE или UPDATE определяют конкретный оператор, запускающий триггер. Для
оператора UPDATE могут быть указаны столбцы, изменение которых запускает триггер.
Если конкретные столбцы не указаны, то триггер запускает изменение любого столбца. Необязательное ключевое
слово OR присоединяет дополнительный оператор, запускающий триггер.
Ключевое слово ON задает имя таблицы или представления, ассоциированного с триггером.
Необязательное ключевое слово FOR EACH ROW определяет триггер как строчный.
Необязательное ключевое слово WHEN задает дополнительное логическое условие, сужающее область действия
триггера.
Прежде чем перейти к примеру, построения триггера, приведем некоторые дополнительные сведения об обработке
исключительных ситуаций в ORACLE. Процедура RAISE_APPLICATION_ERROR применяется для подключения к
механизму обработки ошибок пользовательских точек входа. С ее помощью можно обработать до 1000 определяемых
пользователем ошибок с номерами в диапазоне от20000 до -20999. Вызов процедуры RAISE_APPLICATION_ERROR
приводит к генерации исключительной ситуации и завершению выполнения вызвавшей процедуру программы
(сравните с рассмотренным выше оператором PL/SQL RAISE). При этом в среду, вызвавшую программу,
возвращается номер и текстовое сообщение о типе ошибки.
Рассмотрим пример триггера, который выполняется, если значение вводимого атрибута "уклоняется по модулю" от
среднего значения для текущего состояния таблицы больше, чем на 30. Пусть таблица Tab1 сформирована
предложениями:
CREATE TABLE Tabl (Atl NUMBER);
INSERT INTO Tabl VALUES(10);
INSERT INTO Tabl VALUES(30);
INSERT INTO Tabl VALUES(50);
Протокол создания триггера представлен ниже. При срабатывании триггера предусмотрена генерация стандартной
обработки ошибки, которой присваивается номер -20002 с соответствующим диагностирующим сообщением.
Обратите внимание на предопределенную переменную :new.Atl, содержащую (по ее смыслу) вводимое значение
атрибута Atl.
Пример 2.3.30
SQL>CREATE OR REPLACE TRIGGER TRIG_TBI
BEFORE INSERT ON Tabl
FOR EACH ROW
DECLARE
StatAvg NUMBER;
StatN NUMBER;
BEGIN
SELECT COUNT(Atl),SUM(Atl) INTO StatN, StatAvg
Страницы
- « первая
- ‹ предыдущая
- …
- 67
- 68
- 69
- 70
- 71
- …
- следующая ›
- последняя »
