Базы данных. Концепция баз данных, реляционная модель данных, языки SQL и XML. Токмаков Г.П. - 133 стр.

UptoLike

Составители: 

133
В листинге 6.28 приведена функция, которая проверяет количество экземп-
ляров книги на складе по коду и номеру издания. Код книги используется во
внутрениих операциях базы данных и присутствует в нескольких таблицах.
Следовательно, функция
stock_amount() предназначена для вызова из дру-
гих функций, а не прямого вызова из клиентской программы, поскольку боль-
шинству пользователей коды книг неизвестны.
Сначала мы читаем код
ISBN командой SELECT INTO. Если команда SELECT
INTO не смогла найти код ISBN по заданному коду книги и номеру издания,
функция
stock_amount() возвращает 1.
Функция, вызвавшая
stock_amount(), интерпретирует это значение как
признак ошибки. Если код
ISBN найден, то другая команда SELECT INTO получает
количество экземпляров книги на складе и возвращает полученную величину.
На этом работа функции завершается.
Листинг 6.28. Использование команды IF/THEN
CREATEFUNCTIONstock_amount(integer,integer)RETURNSintegerAS'
DECLARE
‐‐Объявлениепсевдонимовдляаргументовфункции.
b_idALIASFOR$1;
b_editionALIASFOR$2;
‐‐ОбъявлениепеременнойдлякодаISBN.
b_isbntext;
‐‐Объявлениепеременнойдляколичестваэкземпляров.
stock_amountinteger;
BEGIN
‐‐КомандаSELECTINTOнаходитвтаблицеeditionsзапись,
‐‐у
которой код книги и номер издания совпадают с аргументами
‐‐функции.
Код ISBN найденной записи присваивается переменной.
SELECTINTOb_isbnisbnFROMeditionsWHERE
book_id=b_idANDedition=b_edition;
‐‐Проверить,небыллиполученныйкодISBNравенNULL.
‐‐ЗначениеNULLговоритотом,чтовбазеданных
‐‐несуществуетзаписикнигискодоминомеромиздания,
‐‐переданными
в аргументах функции. Если запись не существует,
‐‐функциявозвращает‐1изавершаетработу.
IFb_isbnISNULLTHEN
RETURN‐1;
ENDIF;
‐‐Получитьизтаблицыstockколичествоэкземпляровкниги
‐‐наскладеиприсвоитьегопеременнойstock_amount.
SELECTINTOstock_amountstockFROMstockWHEREisbn=b_isbn;
‐‐Вернутьколичествоэкземпляровнаскладе.
RETURNstock_amount;
END;
'LANGUAGE'plpgsql';
В листинге 6.29 показан результат вызова функции stock_amount() для ко-
да книги
7808 и издания 1.
Листинг 6.29. Результаты вызова функции stock_amount()
booktowrHfSELECTstock_amount(7808,1):