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


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


  • /* проверка существования в системном каталоге объекта с данным именем
  • и типом, созданного владельцем БД */
  • If exists (select * from sysobjects where Id = object_id(?dbo.NEW_BOOKS?) and sysstat & Oxf = 4)
  • /* если объект существует, то сначала его удалим из системного каталога */
  • drop procedure dbo.NEW_BOOKS
  • CREATE PROCEDURE NEW_BOOKS (@SBN varchar(12).@TITL varchar(255).@AUTOR
  • varchar(30),@COAUTOR varchar(30).@YEARIZD 1nt,@PAGES INT,@NUM_EXEMPL INT)
  • /* процедура ввода новой книги с указанием количества экземпляров данной книги
  • параметры
  • @ISBN varchar(12) шифр книги
  • @TITL varchar(255) название
  • @AUTOR varcharOO) автор
  • @COAUTOR varcharOO) соавтор
  • @YEARIZD int год издания
  • @PAGES INT количество страниц
  • @NUM_EXEMPL INT количество экземпляров
  • */
  • AS
  • DECLARE @TEK int
  • declare @INV int
  • INSERT INTO BOOKS VALUES(@ISBN.@TITL.@AUTOR.@COAUTOR,@YEARIZD.@PAGES)
  • /* назначение значения текущего счетчика оставшихся к вводу экземпляров*/
  • SELECT @ТЕК = @NUM_EXEMPL
  • /* определение максимального значения инвентарного номера в библиотеке */

265

  • SELECT @INV - SELECT MAX( ID_EXEMPLAR) FROM EXEMPLAR
  • /* организуем цикл для ввода новых экземпляров данной книги */
  • WHILE @TEK>0 /* пока количество оставшихся экземпляров больше нуля */
  • BEGIN
  • insert Into EXEMPLAR (IDJXEMPLAR.ISBN.DATA_IN.DATA_OUT.EXIST)
  • VALUES (@INV,@ISBN.GETDATE().GetDate(). TRUE)
  • /* изменение текущих значений счетчика и инвентарного номера */
  • SELECT @ТЕК = @ТЕК - 1
  • SELECT @INV = @INV + 1
  • End /* конец цикла ввода данных о экземпляре книги*/
  • GO

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

  • if exists (select * from sysobjects where id = object_id(?dbo. CK_READER?) and sysstat & Oxf = 4)
  • /* если объект существует, то сначала его удалим из системного каталога */
  • drop procedure dbo.CK_READER
  • /* Процедура возвращает номер читательского билета, если читатель есть и 0 в
  • противном случае.


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



    Книжный магазин