2. Қисын операторлары және олардың қызметі?
3. Қатынас операторлары және олардың қызметі?
4. Арнайы операторлар және олардың қызметі?
ДӘРІС 23-24. Сақталатын процедуралар және триггерлер Жоспар
1. Сақталатын процедуралар
2. Курсордың қолдануы
3. Триггерлер
4. Қателер туралы мәліметтерді хабарлау.
Сақталатын процедуралар
Сақталатын процедуралар Transact-SQL тіліндегі программалық код фрагменті, сонымен қатар олар серверде орындалады. Сақталатын процедураларда кез келген SQL-ұсыныстары қолданылады, тек мыналардан басқа CREATE DEFAULT, CREATE RULE, CREATE TRIGGER және CREATE VIEW.
Сақталатын процедуралардың негізгі қолайлығы – компьютер-сервер қуаттылығымен шектелген ақпаратты тез өңдеуде.
Сақталатын процедуралар жоғарғы деңгейлі тілдердің кәдімгі процедураларына ұқсас, оларда сияқты, енгізу, шығару параметрлері мен жергілікті айнымалылар бар. Сонымен қатар, сандық есептеулер мен символдық мәліметтермен амалдар орындалады. Сақталатын процедураларда дерекқорымен стандартты амалдар орындалады. Сонымен қатар, сақталатын процедураларда циклдер мен таралым қолданылады.
Көру аймағы бойынша келесі сақталатын процедуралардың типтерін айыруға болады: жүйелік (System), жергілікті (Local), уақытша (Temporary) және өшірілетін (Remote).
Жүйелік сақталатын процедуралар сервер мен администратор қолданатын Master деректер қорында сақталады. Жүйелік процедуралардың аттары sp_ символымен басталады. Өздік жүйелік сақталатын процедураларды құру үшін sp_ символымен басталатын атауды меншіктеп, оны Master деректер қорында орналастыру керек.
Жергілікті сақталатын процедуралар қолданушы деректер қорында орналасады.
Уақытша сақталатын процедуралардың аттары # немесе ## символымен басталады. # символымен басталатын процедуралар уақытша жергілікті процедуралар болады, сонымен қатар, оларға қатынауға болады егер осы қосылыста жасалса. Қосылысты жапқанда процедура автоматты түрде жойылады. ## екі символымен басталатын процедуралар уақытша аумақты процедуралар болады және оларға берілген сервермен кез келген жұмысында қатынауға болады.
Өшірілген сақталатын процедураларды серверден шақыруға болады. Бірақ ағымды сервер аралық звеноның рөлін ойнайды. Сонымен қатар, өшірілген сақталатын процедураны ол орналасқан серверден де шақыруға болады.
Сақталатын процедуралардың тағы бір типі бар: кеңейтілген сақталатын процедуралар (extended stored procedures). Олар С сияқты программалау тілінде жазылады. Кеңейтілген сақталатын процедуралар динамикалық байланыстар кітапхана – DLL (Dinamic Link Library) құрамындағы функциялар сияқты бейнеленеді. Кеңейтілген сақталатын процедуралардың аттары xp_ символымен басталады.
Сақталатын процедураларда 1024 параметрлер болу мүмкін. Әр параметрді анықтау келесі түрде жүргізіледі:
@параметр_атауы мәліметтер_типі Параметр атауы @ символымен басталу керек. Бұл символдан кейін Unicode кез келген әріптері, @, $, # және _ цифрлары мен символдары жалғасу керек.
Сақталатын процедураларда RETURN инструкциясы қолданылуы мүмкін. Ол процедура орындауын тоқтатады, ал инструкцияға жағдай кодын интерпретациялайды.
Сақталатын процедуралардағы барлық жергілікті айнымалылар олардың қолданылуына дейін хабарлану керек. Осы процедураның шектерінде ерекше аттар болу керек. Айнымалының көріну аймағы оның хабарлануына дейін кодтың барлық жолдарына таратылады.
Хабарламаның нысаны параметрді хабарлау нысанына ұқсас:
DECLARE @айнымалы_атауы мәліметтер_типі Айнымалы не параметрге мәнді меншіктеу үшін SET инструкциясы қолданылады.
Курсордың қолдануы. Курсор – бұл ерекше уақытша SQL объектісі, бағдарламаларда және сақталған процедураларда қолдану үшін арналған. Оның көмегімен циклда жолдарды сұрау, олардың әр жолын жеке-жеке ескеріп отыруға болады. Курсордың көмегімен сақталған процедуралардан SELECT инструкциясының синтаксисі арқылы шығарылатын күрделі есептеулерді орындауға болады. Сонымен қатар, жаңартылған курсорлар таңдамалы жаңарту және нәтиже беретін кестелер жолдарының сұранысын өшіруге болады. Курсормен жұмыс бес әрекеттен тұрады:
Курсорды хабарлаңыз.
OPEN инструкциясының көмегімен курсорды ашыңыз..
FETCH көмегімен курсордың әр жолын циклда рет-ретімен оқыңыз.
Қисынға сәйкес процедураны жаңартыңыз немесе өшіріңіз.
CLOSE инструкциясы көмегімен курсорды жабыңыз.
Егер, курсор сізге керек емес болса, онда DEALLOCATE инструкциясы көмегімен курсорды босатыңыз.
Триггерлер. Триггерлер сақталған процедуралардың әр түрлілігін қамтиды. Тригерлермен байланысқан кестелерді өзгерткен уақытта автоматты түрде іске қосылады. Анықталған кестелерді қойылу кезінде, олардың берілгенін өшіргенде немесе модификациялағанда, триггер – автоматты түрде іске қосылады.
Көбінесе триггерлер деректер базасының күрделі критерийлерінде қолданылады, егер стандартты шектемелер жетіспегенде және кестелік қажеттіліктердің берілгендері толық жабдықталса.
Триггер және Transact-SQL сұраныс операторы бірыңғай транзауция сияқты қаралады, триггерден өзгерту арқылы. Әдетте триггердің құрамына орындалу командалардың тобы немесе белгілі бір шартты тексеру кіреді.Деректерді өңдеу мүмкін емес жағдайда немесе шарт орындалмау кезінде транзакция итеріледі.
Триггерді жасау тек мәліметтер базасының иесіне ғана мүмкін. Бұл шектеу, кестелердің құрамының кенеттен өзгермеуінен және олардың басқа объекттермен қатынасын сақтайды.
Триггерді құру үшін келесі форматтағы CREATE операторы қолданылады:
CREATE TRIGGER [иесі.]триггердің аты
ON [иесі.]кестенің_аты
FOR {INSERT, UPDATE,DELETE}
[WITH ENCRYPTION]
AS
< оператор_SQL>
Бұл жерде кілттік сөз INSERT (Вставить), UPDATE (Обновить), DELETE (Удалить) триггердің орындалу операцияларын анықтайды. WITH ENCRYPTION (с шифрованием) параметрі тексті оқу мүмкіндігін береді. SQL Server триггердің текстін syscomments жүйелік каталогының кестесінде сақтайды..
Қою және Жаңарту триггерлері кестені енгізген кезде ссылканың бүтіндігінің шартын және мәліметтердің дұрыстығын қолдайды. Әдетте, қажет етілген критерийге сәйкес келетін анықталған бағандардың мәліметтерін тексеру үшін қолданылады. Триггерлерді тексеру критерийі өте қиын болған жағдайда ғана қолданған дұрыс.
Іnserted кестесі құрамына әр жолдың көшірмесі транзакцияның сәтті аяқталуы кезінде ғана қосылады. Бұл кесте және оның мәні транзакцияның дұрыстығын тексерудегі кез-келген операцияны салыстыру үшін қолданылады. Inserted кестесінің бағаны жұмыс кестесінің бағандарымен туп-тура сәйкес келеді.
Мысалы: Predp ( предприятие ) және tovar ( товар ) екі кестесі берілсін. Ол cod ( код предприятия ) жолына қатысты «біреуі көбіне». Кестеге қосу tovar бір жағдайда ғана мүмкін болады, егер ол ата-аналар кестесінде бар болса. Қою триггері tovar кестесі үшін, мына түрде беріледі:
CREATE TRIGGER add_tovar
ON tovar
FOR INSERT
AS
IF (NOT EXISTS(SELECT a.cod FROM predpr a, inserted b WHERE a.cod = b.cod))
BEGIN
ROLLBACK TRAN
RAISERROR('осы кодпен берілген мекекеме жұмыс істемейді', 16,10)
END
Өшіру триггері, әдетте, мына жағдайда қолданылады:
- жолдарды өшіру көбінесе кестенің бүтіндігіне кедергісін келтіруі мүмкін. Мысалы, басқа кестелер бойынша сыртқы кілт ретінде қолданылатын жолдар;
- негізгі жолдарының туынды жолдарын өшіру, каскадтық операцияларды орындау.
Өшіру триггерін құрған кезде өшіру командасы бірнеше кестенің жолдарын есте сақтаған жөн.
Deleted кестесі әр жолдың көшірмесінен тұрады. Бұл кесте және оның мәні транзакцияның дұрыстығын тексеруге арналған кез-келген теңестіру үшін пайдаланылады. Deletedи кестесінің бағаны жұмыс кестесінің бағанымен сәйкес келеді.
Келесі мысалда Өшіру триггеріне арналған. PREDP кестесі бір жолдан көп өшіреді:
CREATE TRIGGER del_predp
ON predp
FOR DELETE
AS
IF @@ROWCOUNT > 1
BEGIN
ROLLBACK TRAN
RAISERROR (‘бір рет бір жолды өшіруге болады’,16,10)
END
IF EXISTS(SELECT * FROM tovar a, deleted b WHERE a.cod = b.cod)
BEGIN
ROLLBACK TRAN
RAISERROR (‘записті өшіруге болмайды’,16,10)
END