Хранимые процедуры - часть 10
за читателем значение ноль */
Return 1
END
else
/* если значение переменной @N_R не равно нулю, то читатель с заданными
характеристиками был ранее записан в нашей библиотеке */
BEGIN
/* определение количества книг у читателя с найденным номером читательского
билета */
select @COUNT_BOOKS = COUNT(INV_NUMBER) FROM EXEMPLAR WHERE
NUM_READER = @N_R
select @Count_books = COALESCE( @COUNT_BOOKS.0)
/* присваиваем выходному параметру @COUNT_BOOKS значение, равное количеству
книг, которые числятся за нашим читателем, если в предыдущем запросе
@COUNT_BOOKS было присвоено неопределенное значение, то мы заменим его
на ноль, используя для этого встроенную функцию COALESCE(@COUNT_BOOKS.0),
которая возвращает первое определенное значение из списка значений,
заданных в качестве ее параметров */
Select @Y_N = 1
/* присваиваем выходному параметру @Y_N значение 1, что соответствует тому,
что данный читатель ранее в нашей библиотеке был записан */
268
Select @NUM_READER = @N_R
/* присваиваем выходному параметру @NUM_READER определенный ранее номер
читательского билета */
return 0
end
Теперь посмотрим, как работает наша новая процедура, для этого в режиме интерактивного выполнения запросов (то есть в Query Analyzer MS SQL Server 7.0) запишем следующую последовательность команд:
-- пример использования выходных параметров при вызове процедуры
-- new reader
-- зададим необходимые нам переменные
Declare @K int. @N int. @B int
exec NEW_READER ?Пушкин В.В.?.?Литовский 22-90?.
?333-55-99?. ?444-66-88?. ?01.06.83?. @NUM_READER =@K OUTPUT.
@Y_N = @N OUTPUT.@COUNT_BOOKS = @B OUTPUT
-- теперь выведем результаты работы нашей процедуры используя ранее
-- определенные нами переменные
Select ?номер билета?,@К.?да - нет?,@N.?кол-во книг?.@В
Мы получим результат:
Номер билета |
да - нет |
кол-во книг |
18 |
0 |
0 |
Если же мы снова запустим нашу процедуру с теми же параметрами, то есть повторим выполнение подготовленных выше операторов, то получим уже иной ответ:
Содержание Назад Вперед