PROMPT Creating Trigger 'AS_MZMP_OJR' CREATE OR REPLACE TRIGGER AS_MZMP_OJR AFTER DELETE OR INSERT OR UPDATE ON MZMP_OJR BEGIN -- IRN 2888 IF SYS_CONTEXT ('LOGINFO_CTX', 'SSOUSER') = 'ITNEW' AND SYS_CONTEXT ('LOGINFO_CTX', 'VLASNIKPODATKA') = pra_zmp_zaj.vrijednost_parametra ('0999') THEN RETURN; -- izlaz iz trigera END IF; /* Redom se dešava sljedeće: - standardna replikacija MZMP_OJR - kopiranje ponuda na novi čvor - kopiranje rezervacija i drugih tablica na novi čvor - proceduru poziva BUR_M_SO, koji se pokreće zbog UPDATE m_so (ovdje) - standardna replikacija M_SO */ replikacija.azuriraj_retke ( aplikacija_p => 'ZMP', tablica_p => 'MZMP_OJR'); /* Kopiranje ponuda i rezervacija pokreće se samo kod UPDATE i samo na centru. */ IF NOT UPDATING OR pra_zmp_zaj.centar = 0 THEN RETURN; END IF; /* Kopiranje ponuda na novi čvor - mora biti prije kopiranja rezervacija */ DECLARE zapis_l tab_mzmp_ojr.zmpojr_rec_type; BEGIN tab_mzmp_ojr.postavi_iterator; WHILE tab_mzmp_ojr.ima_jos LOOP zapis_l := tab_mzmp_ojr.slijedeci_red; replikacija.kopiraj_ponude_na_novi_cvor (zapis_l.id, zapis_l.metcvor_sifra); END LOOP; END; /* Ovaj kod je prebačen iz (DROP-anog) okidača AUS_MZMP_OJR (koji je isto radio samo za UPDATE). U kodu se radi (i) UPDATE m_so, a BUR_M_SO poziva (i) pra_m_so.kopiraj_rez_na_novi_cvor. Iako tablica M_SO koristi paket REPLIKACIJA2, tablice rezervacija koriste paket REPLIKACIJA, kao i MZMP_OJR, pa je prije replikacija rezervacija "gazila" podatke u PL/SQL tablici za MZMP_OJR, te je kod replikacije MZMP_OJR dolazilo (najčešće) do greške "No data found", jer se radio SELECT sa ID rezervacije (zaglavlje ili djeca). */ DECLARE zapis_l tab_mzmp_ojr.zmpojr_rec_type; br_redaka_l NUMBER; BEGIN tab_mzmp_ojr.postavi_iterator; WHILE tab_mzmp_ojr.ima_jos LOOP zapis_l := tab_mzmp_ojr.slijedeci_red; SELECT COUNT (1) INTO br_redaka_l FROM m_so WHERE ojr_id = zapis_l.id; IF br_redaka_l > 0 THEN UPDATE m_so SET metcvor_sifra = zapis_l.metcvor_sifra WHERE ojr_id = zapis_l.id; END IF; END LOOP; END; END; / SHOW ERROR PROMPT Creating Trigger 'BUS_MZMP_OJR' CREATE OR REPLACE TRIGGER BUS_MZMP_OJR BEFORE UPDATE ON MZMP_OJR BEGIN tab_mzmp_ojr.brisi_tablicu; tab_mzmp_ojr1.brisi_tablicu; END; / SHOW ERROR PROMPT Creating Trigger 'BIS_MZMP_OJR' CREATE OR REPLACE TRIGGER BIS_MZMP_OJR BEFORE INSERT ON MZMP_OJR BEGIN tab_mzmp_ojr1.brisi_tablicu; END; / SHOW ERROR PROMPT Creating Trigger 'BIR_MZMP_OJR' CREATE OR REPLACE TRIGGER BIR_MZMP_OJR BEFORE INSERT ON MZMP_OJR FOR EACH ROW DECLARE cenojr_rec_l mcen_ojr%ROWTYPE; zapis_l tab_mzmp_ojr1.zmpojr_rec_type; BEGIN -- IRN 2888 IF SYS_CONTEXT ('LOGINFO_CTX', 'SSOUSER') = 'ITNEW' AND SYS_CONTEXT ('LOGINFO_CTX', 'VLASNIKPODATKA') = pra_zmp_zaj.vrijednost_parametra ('0999') THEN RETURN; -- izlaz iz trigera END IF; :NEW.dat_valjan := TRUNC (:NEW.dat_valjan); :NEW.dat_ponisten := TRUNC (:NEW.dat_ponisten); :NEW.dat_primjene := TRUNC (:NEW.dat_primjene); pra_zmp.provjeri_regiju_dom (:NEW.reg_id); pra_zmp.provjeri_postu_dom (:NEW.pos_id); -- IRN 1630 cenojr_rec_l.id := :NEW.id; cenojr_rec_l.dat_valjan := :NEW.dat_valjan; cenojr_rec_l.dat_ponisten := :NEW.dat_ponisten; pra_zmp_iud.azuriraj_cenojr (cenojr_rec_l, :NEW.id); -- IRN 2554 IF :NEW.ozn_samo_pp = -1 THEN -- puniti tablicu za provjeru u AIS (Poslovni prostor mora pripadati Knjizi ra?una) zapis_l.id := :NEW.id; tab_mzmp_ojr1.puni_tablicu (zapis_l); END IF; pra_zmp_zaj.upisi_audit (:NEW.unos_korisnik, :NEW.unos_dat, :NEW.izmjena_korisnik, :NEW.izmjena_dat); END; / SHOW ERROR PROMPT Creating Trigger 'BUR_MZMP_OJR' CREATE OR REPLACE TRIGGER BUR_MZMP_OJR BEFORE UPDATE ON MZMP_OJR FOR EACH ROW DECLARE zapis_l tab_mzmp_ojr.zmpojr_rec_type; cenojr_rec_l mcen_ojr%ROWTYPE; -- IRN 1630 zapis2_l tab_mzmp_ojr1.zmpojr_rec_type; BEGIN :NEW.dat_valjan := TRUNC (:NEW.dat_valjan); :NEW.dat_ponisten := TRUNC (:NEW.dat_ponisten); :NEW.dat_primjene := TRUNC (:NEW.dat_primjene); pra_zmp.provjeri_regiju_dom (:NEW.reg_id); pra_zmp.provjeri_postu_dom (:NEW.pos_id); -- Ako se mijenja šifra čvora u OJR mora se mijenjati i u SO vezanim na te OJR IF pra_zmp_zaj.centar = -1 AND NVL (:OLD.metcvor_sifra, '¤') <> NVL (:NEW.metcvor_sifra, '¤') THEN zapis_l.id := :NEW.id; zapis_l.metcvor_sifra := :NEW.metcvor_sifra; tab_mzmp_ojr.puni_tablicu (zapis_l); END IF; -- IRN 1630 IF :NEW.id <> :OLD.id OR :NEW.dat_valjan <> :OLD.dat_valjan OR NVL (:NEW.dat_ponisten, pra_zmp.dat_min_c) <> NVL (:OLD.dat_ponisten, pra_zmp.dat_min_c) THEN cenojr_rec_l.id := :NEW.id; cenojr_rec_l.dat_valjan := :NEW.dat_valjan; cenojr_rec_l.dat_ponisten := :NEW.dat_ponisten; pra_zmp_iud.azuriraj_cenojr (cenojr_rec_l, :OLD.id); END IF; -- IRN 2554 IF :OLD.ozn_samo_pp = 0 AND :NEW.ozn_samo_pp = -1 THEN -- ako OJR postaje OJRP -- provjeriti da nije vezana u kasama kao OJR pra_zmp_s.provjeri_zmpojr_gmpkas (:NEW.id, 'OJR'); -- puniti tablicu za provjeru u AUS (Poslovni prostor i podređeni poslovni prostori moraju pripadati Knjizi računa) zapis2_l.id := :NEW.id; tab_mzmp_ojr1.puni_tablicu (zapis2_l); END IF; IF :OLD.ozn_samo_pp = -1 AND :NEW.ozn_samo_pp = 0 THEN -- ako OJRP postaje OJR -- provjeriti da nije vezana u kasama kao OJRP pra_zmp_s.provjeri_zmpojr_gmpkas (:NEW.id, 'OJRP'); END IF; pra_zmp_zaj.upisi_audit (:NEW.unos_korisnik, :NEW.unos_dat, :NEW.izmjena_korisnik, :NEW.izmjena_dat); END; / SHOW ERROR PROMPT Creating Trigger 'AIS_MZMP_OJR' CREATE OR REPLACE TRIGGER AIS_MZMP_OJR AFTER INSERT ON MZMP_OJR DECLARE zapis_l tab_mzmp_ojr1.zmpojr_rec_type; BEGIN tab_mzmp_ojr1.postavi_iterator; WHILE tab_mzmp_ojr1.ima_jos LOOP zapis_l := tab_mzmp_ojr1.slijedeci_red; pra_zmp_s.provjeri_oj_zmpojr (zapis_l.id, NULL, NULL); END LOOP; END; / SHOW ERROR PROMPT Creating Trigger 'AR_MZMP_OJR' CREATE OR REPLACE TRIGGER AR_MZMP_OJR AFTER DELETE OR INSERT OR UPDATE ON MZMP_OJR FOR EACH ROW BEGIN replikacija.napuni_tab (:OLD.id, :NEW.id); END; / SHOW ERROR PROMPT Creating Trigger 'BS_MZMP_OJR' CREATE OR REPLACE TRIGGER BS_MZMP_OJR BEFORE DELETE OR INSERT OR UPDATE ON MZMP_OJR BEGIN replikacija.brisi_tab; END; / SHOW ERROR PROMPT Creating Trigger 'ADS_MZMP_OJR' CREATE OR REPLACE TRIGGER ADS_MZMP_OJR AFTER DELETE ON MZMP_OJR DECLARE zapis_l tab_mzmp_ojr1.zmpojr_rec_type; BEGIN tab_mzmp_ojr1.postavi_iterator; WHILE tab_mzmp_ojr1.ima_jos LOOP zapis_l := tab_mzmp_ojr1.slijedeci_red; pra_zmp_s.provjeri_podredjene_ojrp (zapis_l.id); END LOOP; END; / SHOW ERROR PROMPT Creating Trigger 'AUS_MZMP_OJR' CREATE OR REPLACE TRIGGER AUS_MZMP_OJR AFTER UPDATE ON MZMP_OJR DECLARE zapis_l tab_mzmp_ojr1.zmpojr_rec_type; BEGIN tab_mzmp_ojr1.postavi_iterator; WHILE tab_mzmp_ojr1.ima_jos LOOP zapis_l := tab_mzmp_ojr1.slijedeci_red; pra_zmp_s.provjeri_oj_zmpojr (zapis_l.id, NULL, NULL); /* ako se ne treba provjeriti dat valjan poništen, dovoljno je provjeriti da ova OJ ima nadređenu OJR inače bi trebali provjeravati podređene pra_zmp_s.provjeri_podredjene_ojrp (zapis_l.id); */ END LOOP; END; / SHOW ERROR PROMPT Creating Trigger 'BDS_MZMP_OJR' CREATE OR REPLACE TRIGGER BDS_MZMP_OJR BEFORE DELETE ON MZMP_OJR BEGIN tab_mzmp_ojr1.brisi_tablicu; END; / SHOW ERROR PROMPT Creating Trigger 'BDR_MZMP_OJR' CREATE OR REPLACE TRIGGER BDR_MZMP_OJR BEFORE DELETE ON MZMP_OJR FOR EACH ROW DECLARE zapis_l tab_mzmp_ojr1.zmpojr_rec_type; BEGIN -- IRN 1630 pra_zmp_iud.azuriraj_cenojr (NULL, :OLD.id); -- IRN 2554 IF :OLD.ozn_samo_pp = 0 THEN -- ako se briše OJR -- puniti tablicu za provjeru u ADS (Podređeni poslovni prostori moraju pripadati Knjizi računa) zapis_l.id := :OLD.id; tab_mzmp_ojr1.puni_tablicu (zapis_l); END IF; END; / SHOW ERROR