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



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

RETURN COALESCE (@TEK_Count, ()) 
Енді осы рəсімді шақырамыз, ол ҥшін рəсімді орындау нəтижелерін 
орналастыруға болатын ауыспалыны дайындаймыз: 
declare @N int 
@N  ауыспалыда  ағымдағы  жылы  «АКАДЕМИЯ»  баспасы  басып 
шығарған,  кітапханада  бар  кітап  санын  аламыз.  Біз  барлық 
параметрлерді белгілей отырып, осы рəсімге қайта орала аламыз: 
EXEC  @N  =  COUNT_BOOKS  @PUBLICH  =  'АКАДЕМИЯ', 
@YEARIZD = 2004 
Сонда 2014 ж. «АКАДЕМИЯ» баспасымен басып шығарылған жəне 
біздің кітапханамызда бар кітап санын аламыз.  
Егер  біз  параметрлерді  аттары  бойынша  белгілейтін  болсақ,  онда 
рəсімді жасау кезінде сипатталған тəртіппен белгілеу міндетті емес.  
Әрбір  сақталатын  рəсім  ДҚ  объектісі  болып  табылады.  Жҥйелік 
каталогта оның бірегей аты мен бірегей ішкі нөмірі бар. Біз сақталатын 
рəсімнің  мəтінін  өзгерту  кезінде  алдымен  осы  рəсімді  ДҚ-да 
сақталатын объект ретінде жоюымыз керек жəне содан кейін ғана оның 
орнына жаңасын жазуымыз керек. Сақталатын рəсімді жою кезінде сол 
уақытта оның барлық нҧсқасы жойылатынын атап өткен жөн.   
Ескі  рəсімді  жою  жəне  оны  жаңасына  ауыстыру  ҥрдісін 
автоматтандыру  ҥшін,  сақталатын  рəсім  мəтінінің  басында  жҥйелік 
каталогта осындай аты бар ―сақталатын рəсім‖ типті объекттің болуын 
тексеруге  болады  жəне  осы  объекттің  сипаттамасы  болған  жағдайда 
оны жҥйелік каталогтан жою керек. Бҧл жағдайда сақталатын рəсімнің 
мəтіні арнайы тексеру операторымен ескертіледі жəне мысалға, келесі 
тҥрде болуы мҥмкін: 
/*  жҥйелік  каталогта  осындай  аты  жəне  ДҚ  иесі  жасаған  типті 
объекттің болуын тексеру */ 
IF  exists  (select  *  from  sysobjects  where  id  =  object_id 
('dbo.NEW_BOOKS') and systant & Oxf = 4) 
/*  егер  объект  болса,  онда  оны  алдымен  жҥйелік  каталогтан 
жоямыз*/ 
drop procedure dbo.NEW_BOOKS 
GO 
CREATE  PROCEDURE  NEW_BOOKS  (@ISBN  varchar  (12).@TITL 
varchar (255),@AUTOR varchar (30).@COAUTOR varchar (30).@ 
YEARIZD int. @PAGES INT,@NUM_EXEMPL INT) 
/* осы кітаптың дана саны көрсетілген жаңа кітапты енгізу рəсімі  


Параметрлер 
@ISBN 
@TITL 
@AUTOR 
@COAUTOR 
@YEARIZD 
@PAGES 
@NUM_EXEMPL 
AS 
varchar (12) — кітап шифрі 
varchar(255) — атауы 
varchar(30) — автор 
varchar(30) — бірлескен автор 
int 
int 
int 
— басып шығарылған жылы 
— бет саны 
— дана саны */ 
/*қалған 
кіріске 
алынбаған, 
яғни 
инвентарлы 
нөмірлер 
тағайындалмаған  кітап  данасының  саны  сақталатын  ауыспалыны 
сипаттаймыз */ 
/DECLARE @ТЕК int 
/ *кітап туралы деректерді BOOKS кестесіне енгіземіз*/ 
INSERT INTO BOOKS VALUES @ISBN. @TITL. @AUTOR. 
@COAUTOR.@YEARIZD@PAGES) 
/*  қалған  енгізілуі  қажет  дана  санының ағымдағы  есептегіш  мəнін 
тағайындау / 
SELECT @ТЕК = @NUM_EXEMPL 
/* осы кітаптың жаңа данасын енгізу ҥшін циклді ҧйымдастырамыз 
*/ WHILE @TEK>0 /* қалған дана саны нөлден артық */ 
/*  кітап  данасының  инвентарлы  нөмірі  ҥшін  IDENTITY  қасиетін 
белгілегендіктен,  инвентарлы  нөмірді  енгізу  қажет  емес.  СУБД  бҧдан 
бҧрынғыға бір бірлікті қосып, оны автоматты тҥрде есептейді, INSERT 
енгізу операторын орындау кезінде енгізеді. 
Кітапханадағы  дананың  барын  айқындайтын  ая  (EXIST),  — 
логикалық  ая;  біз  онда  кітапханадағы  бар  кітап  данасына  сəйкес 
келетін TRUE мəнін енгіземіз */ 
INSERT  into  EXEMPLAR  (ISBN.DATA_IN.  DATA_OUT.  EXIST) 
VALUES (@ISBN.GetDate ().GetDate ()).TRUE) 
/* қалған дана санын есептегіштің ағымдағы мəнін өзгерту */ 
SELECT @ТЕК = @ТЕК - 1 
END /* кітап данасы туралы деректерді енгізу циклінің соңы */ 
Егер  біз  дананың  инвентарлы  нөмірі  ретін  инкрементті  аяны 
пайдаланбасақ, кітапханада сақталатын соңғы кітап данасының нөмірін 
бір  бірлікке  арттыра  отырып,  инвентарлы  нөмірді  өзіміз  тағайындау 
алушы  едік.  Кітапханада бар  дана  санын  есептеуге  болатын еді, бірақ 
біз  кейбіреулерін  жойып  алар  едік.  Сонда  жаңа  дананың  нөмірі 
əлдеқайда пайдаланылуы мҥмкін жəне біз деректерді енгізе алмаймыз, 
жҥйе бастапқы кілттің бірегейлігін бҧзу мҥмкіндігін бермейді. 
 
BEGIN 
GO 


Бҧл жағдайда рəсімнің мəтіні төмендегідей болады: 
/*  жҥйелік  каталогта  ДҚ  иесі  жасап  шығарған,  осындай  аты  мен 
тҥрі бар объекттің болуын тексеру */ 
if  exists  (select  *  from  sysobjects  where  id  =  object_id('dbo. 
NEW_BOOKS') and sysstat & Oxf = 4) 
/*  егер  объект  болса,  онда  алдымен  оны  жҥйелік  каталогтан 
жоямыз*/ 
drop procedure dbo. NEW_BOOKS 
CREATE PROCEDURE NEW_BOOKS (@ISBN varchar (12).@TITL 
varchar (255),@AUTOR varchar (30).@CoAuTOR varchar (30).@ 
YEARIZD int. @PAGES INT,@NUM_EXEMPL INT) 
/* осы кітаптың дана саны көрсетілген жаңа кітапты енгізу рəсімі  
Параметрлер 
@ISBN 
@TITL 
@AUTOR 
@COAUTOR 
@YEARIZD 
@PAGES 
@NUM EXEMPL 
varchar (12) 
varchar(255) 
varchar(30) 
varchar(30) 
int 
int 
int 
кітаптың шифрі 
атауы 
автор 
бірлескен автор 
шығарылған жылы 
бет саны 
дана саны */ 
*/ 
DECLARE @TEK int 
DECLARE @INV int 
INSERT INTO BOOKS VALUES (@ISBN.@TITL.@AUTOR. 
@COAUTOR.@YEARIZD.@PAGES) 
/*  қалған  енгізілуі  қажет  дана  санының  ағымдағы  есептегіш  мəнін 
тағайындау */ 
SELECT @ТЕК = @NUM EXEMPL 
/* кітапханадағы инвентарлы нөмірдің ең жоғарғы мəнін айқындау 
*/ 
SELECT @INV = SELECT MAX (ID_XEMPLAR) 
FROM EXEMPLAR 
/* осы кітаптың жаңа данасын енгізу ҥшін циклді ҧйымдастырамыз 
*/ 
WHILE @ТЕК>0 
/* қалған дана саны нөлден артық */ BEGIN 
insert 
into 
EXEMPLAR 
(ID_XEMPLAR.ISBN.DATA_IN. 
DATA_OUT.EXIST) 
VALUES ((@INV.(@ISBN.GETDATE (). GETDATE (), TRUE) /* 
есептегіш пен инвентарлы нөмірді есептегіштің ағымдағы мəндерін 
өзгерту */ 


жүктеу 10,13 Mb.

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




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

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