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

Состав сооружений: решетки и песколовки: Решетки – это первое устройство в схеме очистных сооружений. Они представляют...

Семя – орган полового размножения и расселения растений: наружи у семян имеется плотный покров – кожура...

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

2022-12-20 17
Создание триггерной процедуры 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.009 с.