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


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


Мы можем обратиться к этой процедуре и задав все параметры:

  • Exec @N = COUNT_BOOKS @PUBLICH = ?BHW?. @YEARIZD = 1999

Тогда получим количество книг, изданных издательством "BHW" в 1999 году и присутствующих в нашей библиотеке.

Если мы задаем параметры по именам, то нам необязательно задавать их в том порядке, в котором они описаны при создании процедуры.

Каждая хранимая процедура является объектом БД. Она имеет уникальное имя и уникальный внутренний номер в системном каталоге. При изменении текста хранимой процедуры мы должны сначала уничтожить данную процедуру как объект, хранимый в БД, и только после этого записать на ее место новую. Следует отметить, что при удалении хранимой процедуры удаляются одновременно все ее версии, нельзя удалить только одну версию хранимой процедуры.

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

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

263

  • /* если объект существует, то сначала его удалим из системного каталога */
  • drop procedure dbo.NEW_BOOKS
  • GO
  • CREATE PROCEDURE NEW_BOOKS (@ISBN varchar(12).@TITL varchar(255).@AUTOR varchar(30),@COAUTOR varchar(30),@YEARIZD Int.SPACES INT,@NUM_EXEMPL INT)
  • /* процедура ввода новой книги с указанием количества экземпляров данной книги параметры
  • @ISBN varchar(12) шифр книги
  • @TITL varchar(255) название
  • @AUTOR varcharOO) автор
  • @COAUTOR varcharOO) соавтор
  • @YEARIZD Int год издания
  • @PAGES INT количество страниц
  • @NUM_EXEMPL INT количество экземпляров



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