Создание триггерной процедуры — КиберПедия 

Наброски и зарисовки растений, плодов, цветов: Освоить конструктивное построение структуры дерева через зарисовки отдельных деревьев, группы деревьев...

Адаптации растений и животных к жизни в горах: Большое значение для жизни организмов в горах имеют степень расчленения, крутизна и экспозиционные различия склонов...

Создание триггерной процедуры

2022-12-20 21
Создание триггерной процедуры 0.00 из 5.00 0 оценок
Заказать работу

Синтаксис создания триггерной процедуры:

 

CREATE [OR REPLACE] TRIGGER имя _триггерной процедуры

{BEFORE | AFTER | INSTEAD OF} класс _события

           ON

{NESTED TABLE столбец_вложенной_таблицы OF представление

| базовая_или_выводимая_ таблица

| DATABASE

| [ схема. ] SCHEMA

}

[ именующая_фраза ]

[FOR EACH ROW]

[WHEN (условие_срабатывания)]

{

[DECLARE

[PRAGMA AUTONOMOUS_TRANSACTION;]

раздел других объявлений ]

BEGIN

           раздел кода

[EXCEPTION

раздел обработки исключительных ситуаций ]

END [ имя_триггерной процедуры ]

|

CALL имя_процедуры [(список_параметров)]

};

 

Классы событий для триггерных процедур перечислены ниже:

 

Группа событий Категория Описание
INSERT DML Срабатывает при постановке строки в таблицу
UPDATE DML Срабатывает при модификации строки в таблице. При наличии уточнения OF (UPDATE OF список_полей) может срабатывать только при модификации определенных столбцов
DELETE DML Срабатывает при удалении строк из таблицы. Не срабатывает при TRUNCATE
CREATE(8.1) DDL Срабатывает при выполнении операции CREATE создания объектов, попадающих в перечень в ALL_OBJECTS. Может создаваться на уровне отдельной схемы или всей БД
ALTER(8.1) DDL Срабатывает при выполнении операции ALTER изменения свойств объектов, попадающих в перечень в ALL_OBJECTS. Может создаваться на уровне отдельной схемы или всей БД
DROP(8.1) DDL Срабатывает при выполнении операции DROP удаления объектов, попадающих в перечень в ALL_OBJECTS. Может создаваться на уровне отдельной схемы или всей БД
ANALYZE(9) ASSOCIATE STATISTICS(9) AUDIT(9) COMMENT(9) DISASSOCIATE STATISTICS(9) GRANT(9) NOAUDIT(9) RENAME(9) REVOKE(9) TRUNCATE(9) DDL Прочие группы DDL-событий
DDL(9) DDL Обобщенное название для всех DDL-событий
SERVERERROR(8.1) База данных Срабатывает при фиксации системой серверной ошибки. Может быть только типа AFTER
LOGON(8.1) База данных Срабатывает при возникновении нового сеанса работы пользователя (программы). Может быть только типа AFTER
LOGOFF(8.1) База данных Срабатывает при окончании работы сеанса. Может быть только типа BEFORE. Не срабатывает при разрыве сеанса.
STARTUP(8.1) База данных Срабатывает при открытии БД. Может быть только типа AFTER
SHUTDOWN(8.1) База данных Срабатывает при закрытии БД. Может быть только типа BEFORE. Не срабатывает при SHUTDOWN ABORT.
SUSPEND(9) База данных Срабатывает при приостановке транзакции вследствие нехватки доступной дисковой памяти при добавлении данных (исчерпана дисковая память, достигнут максимум числа экстентов в сегменте, исчерпана квота на табличное пространство). Если причину устранить, операцию DML можно продолжить.

(8.1) Cуществуют, начиная с версии 8.1

(9) Cуществуют, начиная с версии 9

 

Типы AFTER и BEFORE.

 

именующая_фраза (REFERENCING) задает собственное имя для указания в теле процедуры новых и старых псевдостолбцов при выполнении операций INSERT, DELETE и UPDATE (DML-триггерные процедуры). На столбцы типа LONG и LONG RAW такое именование не распространяется. Присваивание распространяется только на индивидуальные столбцы (и не на всю запись). Для INSERT старые значения, а для DELETE новые, всегда NULL.

 

Указание FOR EACH ROW (DML-триггерные процедуры).

 

WHEN указывает на дополнительное условие, необходимое для срабатывания триггерной процедуры (DML-триггерные процедуры).

 

Пример создания триггерной процедуры:

 

CREATE OR REPLACE TRIGGER set_hiredate

BEFORE INSERT ON emp

REFERENCING NEW AS inserted_employee

FOR EACH ROW

BEGIN:inserted_employee.hiredate:= SYSDATE; END set_hiredate;

/

 

Примечание. Работа этой процедуры не эквивалентна следующему изменению описания таблицы EMP:

 

ALTER TABLE emp MODIFY (hiredate DATE DEFAULT SYSDATE);

 

Упражнение: проверить это.

 

Пример того, как можно переделать предыдущую процедуру для имитации DEFAULT SYSDATE в поле HIREDATE:

 

CREATE OR REPLACE TRIGGER set_hiredate

BEFORE INSERT ON emp

REFERENCING NEW AS inserted_employee

FOR EACH ROW

WHEN (inserted_employee.hiredate IS NULL)

BEGIN:inserted_employee.hiredate:= SYSDATE; END set_hiredate;

/

 

 

Фраза CALL может заменять тело триггерной процедуры в виде блока PL/SQL вызовом обычной процедуры на PL/SQL или Java, например:

 

CREATE TRIGGER scott.salary_check

BEFORE INSERT OR UPDATE OF sal, job ON scott.emp

FOR EACH ROW

WHEN (NEW.job <> 'PRESIDENT')

CALL check_sal (:NEW.job,:NEW.sal,:NEW.name);

 

 


Поделиться с друзьями:

История создания датчика движения: Первый прибор для обнаружения движения был изобретен немецким физиком Генрихом Герцем...

Историки об Елизавете Петровне: Елизавета попала между двумя встречными культурными течениями, воспитывалась среди новых европейских веяний и преданий...

Адаптации растений и животных к жизни в горах: Большое значение для жизни организмов в горах имеют степень расчленения, крутизна и экспозиционные различия склонов...

Типы сооружений для обработки осадков: Септиками называются сооружения, в которых одновременно происходят осветление сточной жидкости...



© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!

0.01 с.