Шифрование и секретность в Linux


Триггерная функция check_shipment_addition()



Листинг 11.52. Триггерная функция check_shipment_addition()

CREATE FUNCTION check_shipment_addition () RETURNS opaque AS '

DECLARE

-- Объявление переменной для хранения кода покупателя,

idjiumber integer;

-- Объявление переменной для хранения кода ISBN.

book_isbn text;

BEGIN

-- Если в таблице customers существует код. совпадающий с кодом

-- покупателя в таблице new. присвоить его переменной idjiumber.

SELECT INTO idjiumber id FROM customers WHERE id = NEW.customer_id:

-- Если совпадение не найдено, инициировать исключение.

IF NOT FOUND THEN



RAISE EXCEPTION "Invalid customer ID number.":

END IF;

-- Если в таблице editions существует код ISBN, совпадающий с кодом

-- ISBN в таблице new. присвоить его переменной bookjsbn.

SELECT INTO bookjsbn isbn FROM editions WHERE isbn = NEW.isbn;

-- Если совпадение не найдено, инициировать исключение.

IF NOT FOUND THEN

RAISE EXCEPTION "Invalid ISBN.";

END IF:

-- Если обе предыдущие проверки завершились успешно.

-- обновить количество экземпляров.

IF TG_OP - "INSERT" THEN

UPDATE stock SET stock = stock -1 WHERE isbn = NEW.isbn;

END IF:

RETURN NEW:

END;

' LANGUAGE 'plpgsql':

После создания функции check_shi pment_addi ti on() в таблице shi pments устанавливается триггер для ее вызова. В листинге 11.53 приведен синтаксис команды, создающей триггер check_shipment в базе данных booktown (для клиента psql).



Содержание раздела