Теория баз данных


         

Теперь вызовем эту процедуру, для



Return COALESCE (@TEK_Count,0)

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

declare @N int

Exec @N = COUNTJOOKS @PUBLICH = 'Питер'

В переменной @N мы получим количество книг в нашей библиотеке, изданных издательством «Питер» в текущем году. Мы можем обратиться к этой процедуре и задав все параметры:

Exec @N = COUNTJOOKS @PUBLICH = 'BHW. @YEARIZD = 1999

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

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

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

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

/* проверка существования в системном каталоге объекта с данным именем и типом, созданного владельцем БД */

If exists (select * from sysobjects where id = object_id('dbo.NEW_BOOKS') and sysstat & Oxf = 4)

/* если объект существует, то сначала его удалим из системного каталога */

drop procedure dbo.NEW_BOOKS

GO

CREATE PROCEDURE NEW_BOOKS (@ISBN varchar(12).@TITL varchar(255),@AUTOR

varcharOO),@COAUTOR varchar(30) @YEARIZD int,@PAGES INT.@NUM_EXEMPL INT)

Содержание  Назад  Вперед