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