Створення критичної функції - студопедія

Аргументи, зазначені в команді 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;

Схожі статті