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

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

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

CREATE FUNCTION функция (аргументы) RETURNS тип AS '

DECLARE

объявления

BEGIN

IF условие THEN

команда;

[...]

ELSE

команда;

[...]

END IF;

END;

' LANGUAGE ‘plpgsql’ VOLATILE

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

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

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

CREATE OR REPLACE FUNCTION books.in_stock(integer, integer)

RETURNS boolean AS

$BODY$

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_isbn isbn FROM books.editions WHERE

book_id = b_id AND edition = b_edition;

-- Проверить, не был ли полученный код ISBN равен NULL.

-- Значение NULL говорит о тон. что в базе данных

-- не существует записи книги с кодом и номером издания.

-- переданными в аргументах функции. Если запись не существует.

-- функция возвращает FALSE и завершает работу.

IF b_isbn IS NULL THEN

RETURN FALSE;

END IF;

-- Получить из таблицы stock количество экземпляров книги

-- на складе и присвоить его переменной stock_amount.

SELECT INTO stock_amount stock FROM books.stock

WHERE isbn = b_isbn;

-- Проверить, является ли количество книг на складе

-- положительной величиной. Если количество положительно,

-- функция возвращает TRUE, а если отрицательно

-- или равно нулю - FALSE.

IF stock_amount <= 0 THEN

RETURN FALSE;

ELSE

RETURN TRUE;

END IF;

END;

$BODY$

LANGUAGE 'plpgsql' VOLATILE

В листинге 6.32 показан результат вызова in_stock() для кода книги 4513 и издания 2.

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

SELECT books.in_stock(4513,2);

Ответ: t.

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


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: