SELECT @TEK = @TEK - 1 SELECT @INV = @INV + 1
END
/* кітап данасы туралы деректерді енгізу циклінің соңы */
GO
Сақталатын рəсімдер басқасын шақыруы мҥмкін. Белгілі бір
оқырманның оқу билетінің нөмірін қайтаратын сақталатын рəсімді
жасап шығарамыз:
if exists (select * from sysobjects where id = object fd ('dbo.
CK_READER') AND sysstat & Oxf = 4)
/* егер
объект болса, алдымен оны жҥйелік каталогтан жоямыз */
drop procedure dbo.CK_READER
/* Егер оқырман болса, рəсім оқу билетінің нөмірін қайтарады,
жəне болмаса - 0. Параметрлер ретінде тегі мен туған кҥнін жібереміз
*/
CREATE PROCEDURE CK_READER (@FIRST_NAME varchar
(30). @BIRTH_DAY varchar (12))
AS
/*оқу билетінің
нөмірі сақталатын, ауыспалыны сипаттаймыз */
DECLARE @NUM_READER INT /* оқырманның
болуын
анықтаймыз */
SELECT @NUM_READER = STLECT NUM_READER FROM
READERS
WHERE FIRST_NAME = @ FIRSTJAME AND convert (varchar (8).
BIRTH_DAY,4) = @BIRTH_DAY
RETURN COALESCE ((@NUM_READER.0)
Біз мҧнда da.ta.Time деректер тҥрін varchar(8) деректер тҥріне
тҥрлендіру қызметін пайдаландық. Салыстыру операциясын орындау
кезінде деректер тҥрін келісу ҥшін жасау керек. Шынымен,
@BIRTH_DAY кіреберіс ауыспалының (varchar) символ тҥрі бар, ал
BIRTH_DAY дерекқор аясының SmallDateTime тҥрі бар.
Сақталатын рəсімдер бірнеше шығаберіс параметрдің болуын
болжайды. Ол ҥшін əрбір шығаберіс параметр өз деректер тҥрін
белгілегеннен кейін OUTPUT өзекті сөзіне ие болу керек. Бірнеше
шығаберіс параметрі бар сақталатын рəсім мысалын қарастырайық.
Жаңа оқырманды енгізу рəсімін жасаймыз; бҧл ретте рəсімнің
ішінде жаңа оқу билетінің нөмірін тағайындамау ҥшін, осы
оқырманның картотекамызда болуын тексереміз. Рəсімнің шығаберіс
параметрлері оқу билетінің нөмірі болады - кітапханамызда осындай
сипаттамалары бар оқырманның бҧдан бҧрын жазылу белгісі, ал егер
жазылған болса, қанша кітап алғанын көре аламыз.
/* INSERT операторында @BIRTH_DAY символды ауыспалыны
BIRTH_DAY (туған кҥні) аясы ҥшін айқындалған smalldatetime
деректер тҥріне тҥрлендіруіміз керек. Оны Transact SQL Convert
тілінің кіріктірілген қызметі арқылы тҥрлендіреміз*/
/* енді оқу билетінің тағайындалған нөмірін айқындаймыз */
SELECT @NUM_READER = NUM_READER
FROM READER
WHERE NAME_READER = @NAME_READER Convert (varchar
(8).BIRTH_DAY.4) = @BIRTH_DAY /* мҧнда
қайтадан типті
тҥрлендіру қызметін пайдаланамыз, алайда бҧл жағдайда BIRTH_DAY
аясын smalldatetime тҥрінен @BIRTH_DAY кіреберіс параметрі
белгіленген, varchar (8). тҥріне тҥрлендіру керек */
SELECT @Y_N =0
/* @Y_N шығаберіс параметріне 0 (нөл) мəнін тағайындаймыз, бҧл
осы оқырманның бҧдан бҧрын кітапханамызға жазылмағанын білдіреді
*/
SELECT @COUNT_BOOKS = 0
/* оқырманның қолындағы кітап санын сақтайтын шығаберіс
параметрге нөл мəнін тағайындаймыз */
RETURN 1
END
ELSE
/* егер @N_R ауыспалының мəні нөлге тең болмаса, онда
белгіленген сипаттамаларға сəйкес келетін оқырманның біздің
кітапханамызға бҧдан бҧрын жазылғанын білдіреді */
BEGIN
/* оқу билетінің нөмірі табылған оқырманның қолындағы кітап
санын анықтау */
SELECT @COUNT_BOOKS = COUNT(INV_NUMBER)
FROM EXEMPLAR WHERE NUM_READER = @N_R SELECT
@COUNT_BOOKS = COALESCE (@COUNT_ BOOKS.0)
/*
@COUNT_BOOKS
шығаберіс
параметрге
біздің
оқырманымыздың қолындағы кітап санына тең мəнді тағайындаймыз;
егер бҧдан бҧрынғы @COUNT_BOOKS сҧратуында белгісіз мəн
тағайындалса, онда параметрлері ретінде белгіленген, мəндер тізімінен
алғашқы белгілі мəнді қайтаратын COALESCE(@COUNT_ BOOKS.0)
кіріктірілген
қызметін пайдалана отырып, оны нөлге ауыстырамыз*/
SELECT @Y_N = 1
/* @Y_N шығаберіс параметріне 1 мəнін тағайындаймыз, бҧл осы
оқырманның біздің кітапханаға бҧдан бҧрын жазылғанын білдіреді */