CREATE FUNCTION in_stock (integer.integer) RETURNS boolean AS '
DECLARE
-- Объявление псевдонимов для аргументов функции.
b_id ALIAS FOR $1:
b_edition ALIAS FOR $2:
-- Объявление текстовой переменной для найденного кода ISBN.
b_isbn text:
-- Объявление целочисленной переменной для количества экземпляров. stock_amount integer:
BEGIN
-- Команда SELECT INTO находит в таблице editions запись.
-- у которой код книги и номер издания совпадают с аргументами
-- функции. Код ISBN из найденной записи присваивается переменной.
SELECT INTO b_sbn isbn FROM editions WHERE
bookjd = b_id AND edition - b_edition:
-- Проверить, не был ли полученный код ISBN равен NULL.
-- Значение NULL говорит о тон. что в базе данных
-- не существует записи книги с кодом и номером издания.
-- переданными в аргументах функции. Если запись не существует.
-- функция возвращает FALSE и завершает работу.
IF b_sbn IS NULL THEN
RETURN FALSE: END IF:
-- Получить из таблицы stock количество экземпляров книги
-- на складе и присвоить его переменной stock_amount.
SELECT INTO stock_amount stock FROM stock
WHERE isbn = bjsbn:
-- Проверить, является ли количество книг на складе
-- положительной величиной. Если количество положительно,
-- функция возвращает TRUE, а если отрицательно
-- или равно нулю - FALSE.
IF stock_amount <= 0 THEN
RETURN FALSE: ELSE
RETURN TRUE: END IF:
END:
' LANGUAGE 'plpgsql':
В листинге 11.39 показан результат вызова in_stock() для кода книги 4513 и издания 2.