--Vytvoreni triggeru pro kontrolu vkladanych dat. ------------------------------------------------- ------------------------------------------------- --Trigger provadi kontrolu pri vytvareni nebo uprave tabulky OBJEDNAVKA. --Kontroluje zda muze byt zakaznikovi vytvorena nova objednavka. ------------------------------------------------------------------------ CREATE OR REPLACE TRIGGER tr_nezaplacena_faktura BEFORE INSERT OR UPDATE ON Objednavka FOR EACH ROW BEGIN if not obchod_pkg.lze_objednat(:NEW.RC_ZAK) then raise_application_error(-20001,'Zakaznik si nemuze vytvorit novou objednavku'); end if; END tr_nezaplacena_faktura; / --Trigger provadi kontrolu pri vytvareni nebo uprave tabulky OBJEDNAVKA. --Kontroluje jestli objednavane Album je na skladu na nekterem CD. ------------------------------------------------------------------------ CREATE OR REPLACE TRIGGER tr_CD_na_skladu BEFORE INSERT OR UPDATE ON Objednavka FOR EACH ROW BEGIN if not obchod_pkg.je_na_skladu(:NEW.Nazev_A) then raise_application_error(-20002,'CD neni dostupne skladem'); end if; END TR_CD_na_skladu; / --Trigger provadi kontrolu pri vytvareni nebo uprave tabulky NA. --Kontroluje jestli CD pridavane na fakturu odpovida pozadavkum nektere objednavky, na ketre byla faktura vystavena. --Jestli na fakture je jeste potreba CD s danym albem. -------------------------------------------------------------------------------------------------------------------- CREATE OR REPLACE TRIGGER tr_kontrola_faktury BEFORE INSERT OR UPDATE ON NA FOR EACH ROW DECLARE jmeno Album.Nazev_A%type; BEGIN select Nazev_A into jmeno from CD where ID_CD = :new.ID_CD; if obchod_pkg.pocet_alb_na_fakture(jmeno,:new.Cis_F) <= obchod_pkg.pocet_cd_s_albem_na_fakture(:new.ID_CD,:new.cis_f) then raise_application_error(-20003,'Objednavky na fakture neobsahuji pozadavek na toto album.'); end if; END TR_CD_na_skladu; / --Trigger provadi kontrolu pri vytvareni nebo uprave tabulky UPOMINKA. --Triger pri kazde zmene tabulky upominek vytvori novou tabulku s upominkami, ktere maji byt dnes odeslany. --Odvozeny udaj z tabulky UPOMINKY ------------------------------------------------------------------------------------------------------------ CREATE OR REPLACE TRIGGER tr_dnesni_upominka AFTER INSERT OR UPDATE OR DELETE ON Upominka DECLARE CURSOR Upominky is select RC_ZAK, Datum from Upominka; BEGIN DELETE from NovaUpominka; for I in Upominky LOOP if I.Datum=sysdate then insert into NovaUpominka(RC_ZAK) Values(I.RC_ZAK); end if; end LOOP; END tr_dnesni_upominka; / show errors;