Иллюстрированный самоучитель по PostgreSQL

Передача управления

Команда IF/THEN/ELSE

В команде IF/THEN/ELSE задаются два блока команд. Первый блок выполняется в том случае, если условие истинно, а второй – если оно ложно. Синтаксис команды IF/THEN/ELSE приведен в листинге 11.37.

Листинг 11.37. Синтаксис команды IF/THEN/ELSE.

CREATE FUNCTION функция (аргументы) RETURNS тип AS '
DECLARE
объявления
BEGIN
IF условие THEN
команда:
[…]
ELSE
команда:
[…]
END IF:
END:
' LANGUAGE 'plpgsql':

Функция в листинге 11.38 делает практически то же, что и функция в листинге 11.35: она также определяет код ISBN по коду книги и номеру издания, сохраняет его в переменной и получает количество экземпляров книги на складе.

Затем команда IF/THEN/ELSE проверяет, является ли количество книг на складе положительной величиной. Если число положительно, функция возвращает TRUE – признак наличия книг на складе. В противном случае функция возвращает FALSE. Стоит напомнить, что функция in_stock() предназначена для вызова из других функций, а возвращаемое значение должно интерпретироваться той функцией, из которой она была вызвана.

Листинг 11.38. Команда IF/THEN/ELSE.

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.

Листинг 11.39. Результат вызова функции in_stock().

booktown=# SELECT in_stock(4513.2);
in stock
t
(1 row)

Функция вернула значение TRUE – признак наличия книги на складе.

Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.