Сақталатын рəсімді өздігінен тек ДҚ иесі ғана жəне сақталатын
рəсімді қҧрушы орындай алады. Алайда сақталатын рəсімнің иесі оны
іске қосу ережелерін басқа пайдаланушыларға табыстай алады.
Сақталатын рəсімнің аты жазылатын бағдарламалау тілінде
сəйкестендіруші
болып
табылады
жəне
осы
тілдегі
сəйкестендірушілерге қойылатын барлық талаптарға сəйкес келу керек.
MS SQL Server-де сақталатын рəсім келесі оператормен жасалады:
CREATE PROCEDURE <рəсімнің_аты> [;<нҧсқа>]
{(@параметр1деректер_тҥрі}
[VARYING] [=<өздігінен_мəні>] [OUTPUT]] [,.параметр^]
[ WITH
{RECOMPILE | ENCRYPTION | RECOMPILE, ENCRYPTION}]
[FOR REPLICATION]
A
S
Р
ӘСІМНІҢ ДЕНЕСІ
Мҧндағы міндетті емес VARYING өзекті сөзі бҧдан бҧрын
айқындалған параметр ҥшін өздігінен белгіленген мəнді айқындайды.
RECOMPILE өзекті сөзі қҧрылатын сақталатын рəсімнің
компиляция режимін айқындайды. Егер RECOMPILE өзекті сөзі
белгіленсе, онда рəсім орындауға шақырылған сайын қайта
компиляцияланады. Бҧл рəсімнің орындалуын баяулатуы мҥмкін.
Алайда егер осы сақталатын рəсіммен өңделетін деректер алғаш
шақыру кезінде жасалған бҧдан бҧрынғы орындау жоспары одан арғы
шақырулар кезінде мҥлде тиімсіз болатындай қарқынды болса, онда
осы рəсімді қҧру кезінде осы параметрді қолданған жөн.
ENCRYPTION өзекті сөзі сақталатын рəсімнің бастапқы мəтіні ДҚ-
да сақталмайтын режимді айқындайды. Мҧндай режим сақталатын
рəсімдер болып табылатын зияткерлік өнімге авторлық қҧқықты сақтау
ҥшін қолданылады. Жасап шығарушы жасап шығарылған рəсімдердің
бастапқы мəтіндері тапсырыс берушіде жҧмыс істейтін ДҚ əкімшісіне
қолжетімді болғанын қаламаса, осындай режим жиі қолданылады.
Алайда сақталатын рəсімнің атынан басқа барлық қалған
параметрлер міндетті емес. Рəсімдер рəсім немесе қызмет-рəсімдер
болуы мҥмкін. Бҧл ҧғымдар мҧнда жоғары деңгейлі бағдарламалау
тіліндегідей дəстҥрлі тҥсіндіріледі. Сақталатын қызмет-рəсім рəсімнің
атын айқындайтын ауыспалыға тағайындалатын мəнді қайтарады.
Рәсі
Рəсім мəнді айқын тҥрінде қайтармайды, алайда онда осы параметрдің
шыға беріс болып табылатынын айқындайтын OUTPUT өзекті сөзі
пайдаланылуы мҥмкін.
Қарапайым сақталатын рəсімнің бірнеше мысалын қарастырайық.
/* параметрлер кітапханасындағы нақты кітап данасының болуын
тексеретін рəсім:
@ISBN — кітаптың шифрі — рəсім дана санына тең параметрді
қайтарады. Егер нөл қайтып келсе, онда бҧл кітапханадағы осы
кітаптың бос данасы жоқ екенін білдіреді. */ CREATE PROCEDURE
COUNT_EX ((@ISBN varchar (12))
AS
/* ішкі ауыспалының анықтаймыз */
DECLARE (@TEK_COUNT int
/* тиісті операторды орындаймыз SELECT
Қазіргі уақытта оқырмандардың қолындағы емес, кітапханадағы
даналарды ғана санаймыз */
SELECT @TEK_COUNT = select count (*)
FROM EXEMPLAR
WHERE ISBN = @ISBN
AND READER_@ID Is NULL AND EXIST = True /* 0 —
кітапханадағы осы кітаптың бірде бір бос данасының жоқтығын
білдіреді */
RETURN @TEK_COUNT
Сақталатын рəсім бірнеше тəсілмен шақырылуы мҥмкін.
Қарапайым тəсіл - операторды пайдалану:
EXEC <рəсімнің аты><кіреберіс параметрдің мəні1>... <шығаберіс
параметрге арналған ауыспалының аты 1>...
Бҧл ретте барлық кіреберіс жəне шығаберіс параметрлер міндетті
тҥрде рəсімде айқындалған тəртіппен белгіленуі керек.
Мысалы, егер ISBN 966-7393-0809 бар «Oracle8. Пайдаланушы
энциклопедиясы» кітаптар данасының санын табу керек болса, онда
бҧдан бҧрын жасалған сақталатын рəсімді шақыру мəтіні төмендегідей
болу керек:
/*Екі ауыспалы айқындалды: осы кітаптың @Ntek данасы
кітапханада бар; @ISBN — кітаптың халықаралық шифрі */ declare
@Ntek int
DECLARE @ISBN VARCHAR(14)
/* Ауыспалының мəнін тағайындаймыз @ISBN */
SELECT @ISBN = '966-7393-08-09'
/* @Ntek ауыспалыға COUNT_EX сақталатын рəсімді орындау
нəтижелерін тағайындаймыз*/
EXEC @Ntek =COUNT_EX:2 @ISBN
Егер сақталатын рəсімнің бірнеше нҧсқасы айқындалса, онда
шақыру кезінде орындауға арналған нақты нҧсқаның нөмірін көрсете
аласыз. Мысалы, COUNT_EX рəсімнің 2 нҧсқасында осы рəсімді
орындайтын соңғы оператордың тҥрі төмендегідей
EXEC @Ntek =COUNT_EX:2 @ISBN
Алайда, егер рəсімде кіреберіс параметрлердің мəндері өздігінен
айқындалса, онда рəсімді іске қосу кезінде барлық параметрдің мəні
көрсетілмеуі мҥмкін. Бҧл жағдайда рəсімді шақыру операторы келесі
тҥрде жазылуы мҥмкін:
EXEC <рəсімнің аты><параметрдің аты1>=<параметрдің мəні 1>...
<параметрдің атыN>=<параметрдің мəніN>...
Мысалы, белгілі бір баспа белгілі бір жылы басып шығарған кітап
санын есептейтін рəсімді қҧрамыз. Рəсімді қҧру кезінде басып
шығарылған жылы ретінде өздігінен ағымдағы жылдың мəнін
белгілейміз.
CREATE PROCEDURE COUNT_BOOKS (@YEARIZD int = Year
(GetDate()).
@PUBLICH varchar (20))
/* белгілі бір жылы басып шығарылған, нақты баспаның кітап
санын есептеу рəсімі. Параметрлері: @YEARIZD int басып
шығарылған жылы жəне
@PUBLICH баспаның аты */
AS
DECLARE @TEK_Count int
SELECT @TEK_COUNT = SELECT COUNT (ISBN)
FROM BOOKS
WHERE YEARIZD =@YEARIZD AND PUBLICH = @PUBLICH
SELECT операторымен орындаумен бірге оны орындау нəтижелері
бҧдан бҧрын айқындалған @lLK_Count ауыспалыға тағайындалады*/
/* рəсімнің жҧмыс істеу нəтижесін қалыптастыру кезінде біз
кітапханада белгіленген жылы шығарылған кейбір баспаның бірде бір
кітабы болмауы мҥмкін екенін есепке алуымыз керек. Бҧл жағдайда
SELECT сҧранысын орындау нəтижесінің мəні белгісіз болады, бірақ
санды мəндерді талдаған жөн. Сондықтан біз қайтарылатын мəн
ретінде nl,n2,...,nm мəндер тізімінен алғашқы нақты мəнді, яғни NULL
тең болмайтын мəнді қайтаратын, Transact SQL COALESCE
(nl,n2,...,nm) тілінің арнайы кіріктірілген қызметінің жҧмыс
нəтижелерін пайдаланамыз*/
Достарыңызбен бөлісу: |