Базы данных. Концепция баз данных, реляционная модель данных, языки SQL и XML. Токмаков Г.П. - 149 стр.

UptoLike

Составители: 

149
ВНИМАНИЕ. При удалении функции, вызываемой по срабатыванию триггера, триггер пере-
стает работать, причем повторное определение функции с тем же именем не исправит проблему.
После повторного создания функции триггер также приходится создавать заново.
6.2.4. PL/PGSQL И ТРИГГЕРЫ
Определения триггеров
PostgreSQL могут содержать ссылки на триггерные
функции (то есть функции, которые должны вызываться при срабатывании
триггера), написанные на языке
PL/pgSQL. Триггер определяет операцию, кото-
рая должна выполняться при наступлении некоторого события в базе данных.
Не путайте определение триггера с определением триггерной функции.
Триггер определяется командой
SQL CREATE TRIGGER, а триггерная функция оп-
ределяется командой
SQL CREATE FUNCTION.
Триггерная функция определяется без аргументов и возвращает значение
специального типа данных
opaque. Синтаксис определения трнггерпой функции
PL/pgSQL командой CREATE FUNCTION приведен в листинге 6.47.
Листинг 6.47. Определение триггерной функции
CREATEFUNCTIONфункция()RETURNSopaqueAS'
DECLARE
объявления;
[...]
BEGIN
команды;
[...]
END;
'LANGUAGE'plpgsql':
В триггерных функциях используются специальные переменные, содержа-
щие информацию о сработавшем триггере. С помощью этих переменных триг-
герная функция работает с данными таблиц. Специальные переменные триг-
герных функций перечислены в таблице 6.3.
Таблица 6.3
Специальные переменные в триггерных функциях
Имя Тип данных Описание
NEW RECORD Новаязаписьбазыданных,созданнаякомандойIN
SERTилиUPDATEприсрабатываниитриггерауровня
записи(ROW).Переменнаяиспользуетсядлямоди‐
фикацииновыхзаписей
OLD RECORD Стараязаписьбазыданных,оставшаясяпослевы‐
полнениякомандыINSERTилиUPDATEприсрабаты‐
ваниитриггерауровнязаписи(ROW)
TGNAME name Имясработавшеготриггера
TG_WHEN text СтрокаBEFOREилиAFTERвзависимостиотмомента
срабатываниятриггера,указанноговопределении
(доилипослеоперации)
TG_LEVEL text СтрокаROWилиSTATEMENTвзависимостиотуровня
триггера,указанноговопределении
TG_OP text СтрокаINSERT,UPDATEилиDELETEвзависимости