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


         

Хранимые процедуры могут вызывать одна



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

if exists (select * from sysobjects

where id = object_id('dbo. CK_READER') and sysstat & Oxf = 4)

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

/* Процедура возвращает номер читательского билета, если читатель есть и 0 в противном случае. В качестве параметров передаем фамилию и дату рождения */

CREATE PROCEDURE CK_READER (@FIRST_NAME varchar(30) .(PBIRTH_DAY varchar(12))

AS

/*опишем переменную, в которой будет храниться номер читательского билета*/

DECLARE (PNUM_READER INT

/* определение наличия читателя */

select @NUM_READER = select NUM_READER from READERS

WHERE FIRST_NAME = @ FIRST_NAME AND

AND convert(varchar(8).BIRTH _DAY,4)=@BIRTH_DAY RETURN COALESCE(@NUM_READER,0)

Мы здесь использовали функцию преобразования типа данных dataTime в тип данных varchar(8). Это было необходимо сделать для согласования типов данных при выполнении операции сравнения. Действительно, входная переменная @BIRTH_DAY имеет символьный тип (varchar), а поле базы данных BIRTH_DAY имеет тип SmallDateTime.

Хранимые процедуры допускают наличие нескольких выходных параметров. Для этого каждый выходной параметр должен после задания своего типа данных иметь дополнительное ключевое слово OUTPUT. Рассмотрим пример хранимой процедуры с несколькими выходными параметрами.

Создадим процедуру ввода нового читателя, при этом внутри процедуры выполним проверку наличия в нашей картотеке данного читателя, чтобы не назначать ему новый номер читательского билета. При этом выходными параметрами процедуры будут номер читательского билета, признак того, был ли ранее записан читатель с данными характеристиками в нашей библиотеке, а если он был записан, то сколько книг за ним числится.

/* проверка наличия данной процедуры в нашей БД*/

if exists (select * from sysobjects where id = object_id(N'[dbo].[NEW_READER]') and OBJECTPROPERTY(id.

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