Базы данных - модели, разработка, реализация


Хранимые процедуры - часть 4


Так, например, в версии 2 процедуры COUNT_EX последний оператор исполнения этой процедуры имеет вид: /

  • EXEC @Ntek = COUNT_EX:2 @ISBN

Однако если в процедуре определены значения входных параметров по умолчанию, то при запуске процедуры могут быть указаны значения не всех параметров. В этом случае оператор вызова процедуры может быть записан в следующем виде:

  • EXEC =...
  • =...

Например, создадим процедуру, которая считает количество книг, изданных конкретным издательством в конкретном году. При создании процедуры зададим для года издания по умолчанию значение текущего года.

  • CREATE PROCEDURE COUNT_BOOKS (@YEARIZD Int - Year(GetDate( )).
  • @PUBLICH varchar(20))
  • /* процедура подсчета количества книг конкретного издательства, изданных
  • в конкретном году
  • параметры:
  • @YEARIZD Int год издания
  • @PUBLICH название издательства
  • */
  • AS
  • DECLARE @TEK_Count int
  • Select @TEK count - Select COUNT(ISBN)

262

  • From BOOKS
  • Where YEARIZD = @YEARIZD AND PUBLICH =@PUBLICH
  • /* одновременно с исполнением оператора Select мы присваиваем результаты его работы определенной ранее переменной @TEK_Count */
  • /* при формировании результата работы нашей процедуры мы должны учесть,
  • что в нашей библиотеке, возможно, нет ни одной книги некоторого издательства
  • для заданного года. Результат выполнения запроса SELECT в этом случае будет
  • иметь неопределенное значение, но анализировать все-таки лучше числовые
  • значения. Поэтому в качестве возвращаемого значения мы используем результаты
  • работы специальной встроенной функции Transact SQL COALESCE (nl.n2, ... ,nm).
  • которая возвращает первое конкретное, то есть не равное NULL, значение из
  • списка значений nl.n2, ... ,nm. */
  • Return COALESCE (@TEK_Count.O)

Теперь вызовем эту процедуру, для этого подготовим переменную, куда можно поместить результаты выполнения процедуры.

  • declare @N int •
  • Exec @N - COUNT_BOOKS @PUBLICH = ?Питер?

В переменной @N мы получим количество книг в нашей библиотеке, изданных издательствам "Питер" в текущем году.


- Начало -  - Назад -  - Вперед -