Э. В. Фуфаев, Д. Э. Фуфаев



жүктеу 10,13 Mb.
Pdf просмотр
бет59/93
Дата19.11.2018
өлшемі10,13 Mb.
#21568
түріОқулық
1   ...   55   56   57   58   59   60   61   62   ...   93

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  мəнін  тағайындаймыз,  бҧл  осы 
оқырманның біздің кітапханаға бҧдан бҧрын жазылғанын білдіреді */ 


жүктеу 10,13 Mb.

Достарыңызбен бөлісу:
1   ...   55   56   57   58   59   60   61   62   ...   93




©g.engime.org 2024
әкімшілігінің қараңыз

    Басты бет
рсетілетін қызмет
халықаралық қаржы
Астана халықаралық
қызмет регламенті
бекіту туралы
туралы ережені
орталығы туралы
субсидиялау мемлекеттік
кеңес туралы
ніндегі кеңес
орталығын басқару
қаржы орталығын
қаржы орталығы
құрамын бекіту
неркәсіптік кешен
міндетті құпия
болуына ерікті
тексерілу мемлекеттік
медициналық тексерілу
құпия медициналық
ерікті анонимді
Бастауыш тәлім
қатысуға жолдамалар
қызметшілері арасындағы
академиялық демалыс
алушыларға академиялық
білім алушыларға
ұйымдарында білім
туралы хабарландыру
конкурс туралы
мемлекеттік қызметшілері
мемлекеттік әкімшілік
органдардың мемлекеттік
мемлекеттік органдардың
барлық мемлекеттік
арналған барлық
орналасуға арналған
лауазымына орналасуға
әкімшілік лауазымына
инфекцияның болуына
жәрдемдесудің белсенді
шараларына қатысуға
саласындағы дайындаушы
ленген қосылған
шегінде бюджетке
салығы шегінде
есептелген қосылған
ұйымдарға есептелген
дайындаушы ұйымдарға
кешен саласындағы
сомасын субсидиялау