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 өзекті сөзіне ие болу керек. Бірнеше
шығаберіс параметрі бар сақталатын рəсім мысалын қарастырайық.
Жаңа оқырманды енгізу рəсімін жасаймыз; бҧл ретте рəсімнің
ішінде жаңа оқу билетінің нөмірін тағайындамау ҥшін, осы
оқырманның картотекамызда болуын тексереміз. Рəсімнің шығаберіс
параметрлері оқу билетінің нөмірі болады - кітапханамызда осындай
сипаттамалары бар оқырманның бҧдан бҧрын жазылу белгісі, ал егер
жазылған болса, қанша кітап алғанын көре аламыз.
/* осы рəсімнің ДҚ-да болуын тексеру */ if exists (select * from
sysobjects where id = object_id (N'[dbo].[NEW_READER]') and
OBJECTPROPERTY (id, N' Is Procedure')=1)
drop procedure [dbo].[NEW_READER]
GO
/* енгізілетін параметрлердің белгіленген мəндері бар оқырманның
барын тексеру рəсімі
Егер мҧндай оқырман болмаса, рəсім оқу билетінің жаңа нөмірін
қайтарады, кері жағдайда - ескі нөмірді жəне оқырман қарызға алған
кітап санын хабарлайды */
CREATE PROCEDURE NEW_READER (@NAME_READER varchar
(30), (@ADRES varchar (40). @HOOM_PHONE char (9).
(@WORK_PHONE char (9), @BIRTH_DAY varchar (8).
@NUM_READER int OUTPUT.
/* оқу билетінің нөмірін айқындайтын шығаберіс параметр */
@Y_N int OUTPUT.
/* оқырманның бҧдан бҧрын кітапханаға жазылғанын айқындайтын
шығаберіс параметр */
@COUNT_BOOKS int OUTPUT
/* оқырман қолындағы кітап санын айқындайтын шығаберіс
параметр */)
AS
/* егер оқырман кітапханаға жазылған болса, оқу билетінің нөмірі
сақталатын ауыспалы */ DECLARE @N_R int '* оқырманның болуын
анықтау */
EXEC @N_R = CK_READER @NAME_READER.@BIRTH_DAY IF
@N_R= 0 Or @N_R Is Null
* егер белгіленген сипаттамаларға сəйкес келетін оқырман болмаса,
яғни @N_R ауыспалыға нөл мəні тағайындалса немесе оның мəні
айқындалмаса, онда жаңа оқырман ҥшін оқу билетінің жаңа нөмірін
тағайындауға өтеміз*/
BEGIN
/* оқу билетінің нөмірін инкрементті ая ретінде айқындағандықтан,
енгізу операторында көрсетпейміз, жҥйе жаңа оқырманға кезекті
нөмірді өзі тағайындайды */
INSERT
INTO
RADER
NAME_READER.ADRES.
HOOM_PHONE,WORK_PHONE. BIRTH_DAY)
VALUES (@NAME_READER.@ADRES.@HOOM_PHONE.
(@WORK_PHONE, Convert (smalldatetime. @BIRTH_DAY.4))
/* 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 мəнін тағайындаймыз, бҧл осы
оқырманның біздің кітапханаға бҧдан бҧрын жазылғанын білдіреді */
Достарыңызбен бөлісу: |