-- 5 sa prethodnih vezbi -- umesto dva okidaca (jedan za unos, a drugi za brisanje predmeta) moze da se napise jedan --CREATE TRIGGER menjanje_predmet -- AFTER INSERT OR DELETE ON da.predmet -- for each row -- BEGIN -- IF INSERTING THEN update broj_predmeta set broj = broj + 1; -- ELSEIF DELETING THEN update broj_predmeta set broj = broj - 1; -- -- END IF; -- END@ --insert into da.predmet (id, oznaka, naziv, espb) -- values(2002, 'predm13', 'predmet 13', 15)@ --select * --from broj_predmeta@ --delete from da.predmet --where id=2002@ --select * --from broj_predmeta@ --drop trigger menjanje_predmet@ --1 --pravljenje tabela --create table student_polozeno ( --indeks int, --espb smallint)@ --create table predmet_polozeno ( --idpredmeta int, --brojstudenata smallint)@ --unos podataka --insert into student_polozeno --select indeks, sum(espb) --from da.ispit i join da.predmet p -- on i.idpredmeta=p.id -- and ocena>5 and status='o' --where not exists (select * -- from da.dosije d join da.PREDMETPROGRAMA pp -- on d.idprograma=pp.idprograma and vrsta='obavezan' -- and d.indeks=i.indeks -- where not exists (select * -- from da.ispit i2 -- where i2.indeks=d.indeks and i2.idpredmeta=pp.idpredmeta -- and ocena>5 and status='o')) --group by indeks@ --merge into student_polozeno sp --using (select indeks, sum(espb) polozeno -- from da.ispit i join da.predmet p -- on i.idpredmeta=p.id -- and ocena>5 and status='o' -- group by indeks --) as t --on sp.indeks=t.indeks --when matched then -- update -- set espb=polozeno --when not matched then -- insert -- values(t.indeks, t.polozeno)@ --insert into predmet_polozeno --select idpredmeta, count --from da.ispit i --where ocena>5 and status='o' --group by idpredmeta@ -- okidac koji menja tabele student_polozeno i predmet_polozeno nakon unosa novog polozenog ispita --create trigger novi_ispit after insert on da.ispit --referencing new as novo --for each row --when (novo.ocena>5 and novo.status='o') --begin atomic -- if novo.indeks in (select indeks from student_polozeno) then -- update student_polozeno -- set espb = espb + (select espb from da.predmet -- where id=novo.idpredmeta) -- where indeks=novo.indeks; -- else insert into student_polozeno -- select novo.indeks, espb -- from da.predmet -- where id=novo.idpredmeta; --end if; -- if novo.idpredmeta in (select idpredmeta from predmet_polozeno) then -- update predmet_polozeno -- set brojstudenata = brojstudenata + 1 -- where idpredmeta=novo.idpredmeta; -- else insert into predmet_polozeno -- values (novo.idpredmeta, 1); --end if; --end@ --select * --from student_polozeno --where indeks=20150320@ --select * --from predmet_polozeno --where idpredmeta=2010@ --unos polozenog ispita za studenta i predmet o kojima postoje podaci u tabelama --student_polozeno i predmet_polozeno --insert into da.ispit (indeks, idpredmeta, oznakaroka, skgodina, -- status, poeni, ocena) --values(20150320, 2010, 'jun2', 2017, 'o', 95, 10)@ --select * --from student_polozeno --where indeks=20150320@ --select * --from predmet_polozeno --where idpredmeta=2010@ --select * --from student_polozeno --where indeks=20152003@ --select * --from predmet_polozeno --where idpredmeta=1695@ --unos polozenog ispita za studenta i predmet o kojima ne postoje podaci u tabelama --student_polozeno i predmet_polozeno --insert into da.ispit (indeks, idpredmeta, oznakaroka, skgodina, -- status, poeni, ocena) --values(20152003, 1695, 'jun1', 2017, 'o', 95, 10)@ --select * --from student_polozeno --where indeks=20152003@ --select * --from predmet_polozeno --where idpredmeta=1695@ --brisanje okidaca i tabela --drop trigger novi_ispit@ --drop table student_polozeno@ --drop table predmet_polozeno@