Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
stud.kz_235124086 (1).doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
900.1 Кб
Скачать

2.15 Сурет Кесте құрылып болғаннан кейінгі ibConsole терезесі

Кестенің мәндерін автоматтау керек, глобальді мәліметтер базасымен жұмыс істегенде, мағынасын көрсету мүмкін емес.Бірнеше пайдаланушы жазуды қою үшін біруақытта дайындала алады. Соңғы қойылған мәнді табу мүмкін емес. Сондықтан бұл процесті автоматтау қажет.Осы мақсатпен мәліметтер базасында генератор объектісі қарастырылған.

2.15-сурет Генератор анықтағаннан кейінгі IBConsole терезесі

Генератор- бұл сандық айнымалы, оның мағынасын gen_id функциясының көмегімен үлкейтуге болады. Генераторды пайдалану үшін оны құру және инициализациялау керек. Генератор құру үшін опетатор пайдаланылады.

Student кестесі үшін генератор орнатуды қарастырайық,мұнда kod_Student (номер студента) ерекше болып табылады. Student кестесінің kod_Student жиегіне генератор құрамыз және бастапқы мағынасы 1-ге тең болады. Бұл үшін ISQL сұрыптама терезесіне төмендегі команданы енгіземіз:

CREATE GENERATOR kod_student_gen

Енді генераторға бастапқы мән анықтаймыз. Student кестесінде жазбалар бар, сондықтан генераторды kod_Student жиегінен инициализациялаймыз. Оны ISQL сұрыптама терезесінде келесі командаларды енгізу арқылы көруге болады:

select MAX(kod_student) from STUDENT

Нәтиже терезесінде мыналар шығады:

MAX

===

4

Біз қолмен 4 жазба енгізгендіктен жиектің мағынасы 4-ке тең. Құрылған генератордың мағынасы бастапқы қондырғы бойынша 0-ге тең. Жазыңыз және сұрыптауды орындаңыз:

SET GENERATOR kod_student_gen TO 4

Енді генератордың мәні 4-ке тең. gen_id() функциясы берілген санға генератордың мәнін үлкейтеді және алынған мәнді қайтарады. kod_student жиегі үшін kod_student_gen генераторының көмегімен алынған нақты сандық мән автоматталды.Бірақ әр жазбаны қою үшін gen_id (kod_Student_gen,1) функциясын шақыру керек. Сервер бұл тапсырманы триггер деп аталатын механизмнің көмегімен автоматтайды.

Триггер- мәліметтер базасын қою, өшіру және жазбаларды өзгерту кезінде қолайсыз жағдай болған кезде SQL сервер жазбаларды автоматты түрде өңдейтін процедура. Программадан триггерлерге байланысуға болмайды Триггерге кіретін параметрлерді беруге болмайды және одан шығатын параметрлерді алуға болмайды. Триггерлар әрқашан әрекетті жүзеге асырады. Триггер базаның нақты кестесімен байланысты және ешқашан пайдаланушыдан тікелей шақырылмайды. Оның орнына ол жұмысты орындауға кіріседі.Мәліметтер базасының кестелері өзгерген жағдайда триггерлер мынадай болып бөлінеді:

жаңа жазба енгізу;

бар жазбаның өзгеруі;

жазбаны өшіру;

Өзін шақыратын оқиғаның түріне байланысты триггерлер былайша жіктеледі:

-оқиғаға дейін орындалатын;

-оқиғадан кейін орындалатын

Триггердегі өзгеріс клиенте қосымшасына программалық кодтың өзгеруіне әсер етпейді және пайдаланушыдан клиенттік қосымшаның жаңа үлгісін үлестіруді талап етпейді.[8] Триггер денесіндегі жазбаларды өшіру, қою, және өзгерту операциялары кезінде NEW және OLD айнымалаларының көмегімен соңғы жазбалардың жиегіне назар аударуға болады. Мысалы, NEW.kod_student мағынасын пайдаланып жазбаны қояр алдында first_name жиегінің мағынасын білуге болады. kod_student жиегіне ерекше мағына қоятын Student кестесі үшін триггер құрайық.

ISQL терезесіне келесі сұранысты енгізіп, оны орындайық:

SET TERM !! ;

CREATE TRIGGER kod_student_gen FOR STUDENT

BEFORE INSERT AS

BEGIN

new.kod_student=gen_id(kod_student_gen,1);

END !!

SET TERM ; !!

Бұл триггер Student кестесінің kod_student жиегіне уникальды мағына қойылғаннан кейін жұмыс істейді.Мына генераторды алу арқылы: new.kod_student=gen_id(kod_student_gen,1);

Осыдан кейін 2 генератор және 2 триггер PREPODAVATEL және DISCIPLINA кестелері үшін анықталады, оған жаңа енгізілген жазбаларды анықтау үшін.

Төменде осы тапсырманы реализациялау үшін SQL код көрсетілген: PREPODAVATEL кестесі үшін

CREATE GENERATOR kod_PREPOD_gen

select MAX(kod_PREPOD) from prepodavatel

SET GENERATOR kod_prepod_gen TO 1

SET TERM !! ;

CREATE TRIGGER kod_prepod_gen FOR PREPODAVATEL

BEFORE INSERT AS

BEGIN

new.kod_prepod=gen_id(kod_prepod_gen,1);

END !!

SET TERM ; !!

Для таблицы DISCIPLINA

CREATE GENERATOR kod_disciplina_gen

select MAX(kod_disciplina) from disciplina

SET GENERATOR kod_disciplina_gen TO 1

SET TERM !! ;

CREATE TRIGGER kod_disciplina_gen FOR DISCIPLINA

BEFORE INSERT AS

BEGIN

new.kod_disciplina=gen_id(kod_disciplina_gen,1);

END !!

SET TERM ; !!

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]