Professional Documents
Culture Documents
4 Trigeri
4 Trigeri
1
Trigeri u MySQL-u
ta su trigeri ?
Trigeri su objekti (uskladitene procedure) pridrueni tabeli,
koji se automatski aktiviraju kada se desi neki dogaaj vezan
za tu tabelu.
2
Trigeri u MySQL-u
Dogaaj
je ona akcija ije izvravanje na pridruenoj tabeli
uzrokuje aktiviranje trigera. Moe biti:
INSERT
UPDATE
DELETE
4
Trigeri u MySQL-u
Primer : Validacija vrednosti polja
6
Trigeri u MySQL-u
OLD i NEW
Kljune rei OLD i NEW se koriste za pristup podacima
u zapisima tabele. OLD se koristi za vrednosti polja pre
promene, a NEW sadri vrednost polja posle promene.
U programu, polju koje se zove emp_name moemo
pristupiti na sledei nain: new.emp_name
Primer:
create trigger bi_zaposleni_fer
before insert on zaposleni
for each row
set new.ime := reverse(new.ime); 7
Trigeri u MySQL-u
Da bi se triger aktivirao potrebno je da zapis bude
dodat u odgovarajuu tabelu.
Primer:
8
Trigeri u MySQL-u
Kompleksni trigeri
Trigeri koji sadre vie od jedne linije koda
Tada se koriste kljune rei BEGIN i END koje imaju svrhu
da oznae kompajleru poetak i kraj koda trigera
Brisanje trigera
DROP TRIGGER naziv_trigera;
Prikazivanje trigera
SHOW TRIGGERS;
9
Trigeri u MySQL-u
Primer:
create trigger bi_zaposleni_fer
before insert on zaposleni
for each row
begin
declare duzina numeric;
set duzina = length(new.ime);
set new.plata = new.plata * duzina;
end
10
Zadatak:
a) Kreirati proceduru PROSEK kojom se za
odreenog studenta (ulazni argument stud_ID)
izraunava prosena ocena (izlazna promenljiva
prosek)
b) Kreirati trigger UPISPROSEKA koji se aktivira
prilikom unosa novih ocena u tabeli ISPITI i
upisuje prosene ocene (koristei proceduru
prosek) u tabeli STUDENTI .
Ispit Studenti
11
Reenje a):
-- --------------------------------------------------------------------------------
-- Routine DDL
-- Note: comments before and after the routine body will not be stored by the server
-- --------------------------------------------------------------------------------
DELIMITER $$
12
Reenje b):
/*Pretpostavka je da je moguce uneti vise n-torki odjednom
pa deklarisemo kursor koji ce obraditi jednu po jednu n-torku.*/
OPEN cur_studenti;
-- deklaracija hendlera
DECLARE continue HANDLER FOR SQLSTATE '02000'
SET cursor_end = true; 13