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

UptoLike

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

147
Прежде всего функция убеждается в том, что переданный код покупателя
(
customer_id) и код ISBN (isbn) присутствуют в таблицах customers и editions.
Если хотя бы один из кодов отсутствует, функция возвращает признак ошибки.
Если оба кода присутствуют в таблицах, команда
SQL выполняется, и после ус-
пешного завершения количество товара на складе в таблице
stock автоматиче-
ски уменьшается в соответствии с объемом поставки.
Триггер, создаваемый в листинге 6.44, срабатывает непосредственно перед
выполнением команды
INSERT или UPDATE в таблице shipments. Триггер вызыва-
ет функцию
check_shipment_addition() для каждой изменяемой записи.
Листинг 6.44. Создание триггера check_shipment
booktown=#CREATETRIGGERcheck_shipment
booktown#BEFOREINSERTORUPDATE
booktown#ONshipmentsFOREACHROW
booktown#EXECUTEPROCEDUREcheck_shipment_addition();
CREATE
Триггер check_shipment настроен на выполнение функции
check_shipment_addition() для команд INSERT и UPDATE, поэтому он достаточно
надежно обеспечивает логическую целостность данных в полях
customer_id и
isbn. Ключевое слово ROW гарантирует, что каждая добавляемая или модифици-
руемая запись будет обработана функцией проверки
check_argument_
addition().
Функция
check_shipment_addition() вызывается без аргументов, посколь-
ку для проверки записей в ней используются внутренние переменные
PL/pgSQL.
6.2.2. П
ОЛУЧЕНИЕ ИНФОРМАЦИИ О ТРИГГЕРАХ
В
PostgreSQL триггеры хранятся в системной таблице pg_trigger, что позво-
ляет получить информацию о существующих триггерах на программном уровне.
Структуру таблицы
pg_trigger иллюстрирует таблице 6.2.
Таблица 6.2
Таблица pgjrigger
Поле Тип
TGRELID oid
TGNAME name
TGFOID oid
TGTYPE smallint
TGENABLED boolean
TGISCONSTRAINT boolean
TGCONSTRNAME name
TGCONSTRRELID oid
TGDEFERRABLE boolean