Аргументи, зазначені в команді CREATE TRIGGER. Індексація масиву починається з нуля
У лістингу 6.44 наведено приклад визначення трнггерной функції PL / pgSDL, що використовує деякі з перерахованих змінних. Тригерна функція check_shipment_ad-dition () викликається після виконання операції INSERT або UPDATE з таблицею shipments.
Функція check_shipment_addition () переконується в тому, що кожна нова запис містить дійсний код покупця і код ISBN книги. Потім загальна кількість примірників в таблиці stock зменшується на 1, якщо тригер спрацював по команді SQL INSERT (але не по команді UPDATE!)
Лістинг 6.44. Тригерна функція check_shipment_addition ()
CREATE OR REPLACE FUNCTION books.check_shipment_addition ()
RETURNS trigger AS
-- Якщо в таблиці customers існує код, що співпадає з кодом
-- покупця в таблиці new, привласнити його змінної id_number.
SELECT INTO id_number id FROM books.customers WHERE id = NEW.customer_id;
-- Якщо збіг не знайдено, ініціювати виключення.
IF NOT FOUND THEN
RAISE EXCEPTION 'Invalid customer ID number.';
-- Якщо в таблиці editions існує код ISBN, що співпадає з кодом
-- ISBN в таблиці new, привласнити його змінної book_isbn.
SELECT INTO book_isbn isbn FROM books.editions WHERE isbn = NEW.isbn;
-- Якщо збіг не знайдено, ініціювати виключення.
IF NOT FOUND THEN
RAISE EXCEPTION 'Invalid ISBN.';
-- Якщо обидві попередні перевірки завершилися успішно,
-- оновити кількість примірників.
IF TG_OP = 'INSERT' THEN
UPDATE books.stock SET stock = stock -1 WHERE isbn = NEW.isbn;