/* ALG_TRI.SRC * $Revision$ * $Id$ */ #include "alg\algsql.h" CREATE_TRIGGER(alg_t_alg_import_B_IU) BEFORE INSERT OR UPDATE ON alg_import FOR EACH ROW BEGIN UPDATE_PRIMARY_KEY(alg_import_key, alg_s_alg_import_key); END; / CREATE_TRIGGER(alg_t_alg_regio_B_IU) BEFORE INSERT OR UPDATE ON alg_regio FOR EACH ROW BEGIN UPDATE_PRIMARY_KEY(alg_regio_key, alg_s_alg_regio_key); UPDATE_UPPER(alg_regio_omschrijving, alg_regio_upper,alg_regio); CHECK_NOG_REFERENCES(alg_regio, alg_regio_verwijder, alg_v_aanwezigdistrict, alg_regio_key, 'alg_m211'); UPDATE_AANMAAKDATUM(alg_regio, alg_regio_aanmaak); END; / CREATE_TRIGGER(alg_t_alg_district_B_IU) BEFORE INSERT OR UPDATE ON alg_district FOR EACH ROW BEGIN UPDATE_PRIMARY_KEY(alg_district_key, alg_s_alg_district_key); UPDATE_UPPER(alg_district_omschrijving, alg_district_upper,alg_district); CHECK_NOG_REFERENCES(alg_district, alg_district_verwijder, alg_v_aanweziglocatie, alg_district_key, 'alg_m212'); UPDATE_AANMAAKDATUM(alg_district, alg_district_aanmaak); END; / CREATE_TRIGGER(alg_t_alg_locatie_B_IU) BEFORE INSERT OR UPDATE ON alg_locatie FOR EACH ROW BEGIN -- LET OP : Deze trigger is ook gedefinieerd in ALG !! UPDATE_PRIMARY_KEY(alg_locatie_key, alg_s_alg_locatie_key); UPDATE_UPPER(alg_locatie_code, alg_locatie_code,alg_locatie); UPDATE_UPPER(alg_locatie_omschrijving, alg_locatie_upper,alg_locatie); CHECK_NOG_REFERENCES(alg_locatie, alg_locatie_verwijder, alg_v_aanweziggebouw, alg_locatie_key, 'alg_m213'); CHECK_NOG_REFERENCES(alg_locatie, alg_locatie_verwijder, alg_v_aanwezigterreinsector, alg_locatie_key, 'alg_m214'); UPDATE_AANMAAKDATUM(alg_locatie, alg_locatie_aanmaak); IF :new.alg_locatie_verwijder IS NOT NULL AND :old.alg_locatie_verwijder IS NULL THEN DECLARE dummy CHAR; BEGIN SELECT 'x' INTO dummy FROM cnt_v_aanwezigcontract_plaats, cnt_v_aanwezigcontract WHERE cnt_v_aanwezigcontract_plaats.cnt_contract_key = cnt_v_aanwezigcontract.cnt_contract_key AND cnt_v_aanwezigcontract.cnt_contract_looptijd_tot > sysdate AND cnt_v_aanwezigcontract_plaats.cnt_alg_plaats_key = :old.alg_locatie_key AND cnt_v_aanwezigcontract_plaats.cnt_alg_plaats_code = 'L'; raise_application_error(-20000,'cnt_m028'); EXCEPTION WHEN NO_DATA_FOUND THEN NULL; WHEN TOO_MANY_ROWS THEN raise_application_error(-20000,'cnt_m028'); END; DECLARE dummy CHAR; BEGIN SELECT 'x' INTO dummy FROM mld_melding WHERE mld_alg_locatie_key=:old.alg_locatie_key AND fac_activiteit_key IS NULL AND mld_melding_status IN (0,2,3,4,7); raise_application_error(-20001, 'alg_m999 Locatie kan nog niet verwijderd worden. Er zijn nog lopende meldingen'); EXCEPTION WHEN NO_DATA_FOUND THEN NULL; WHEN TOO_MANY_ROWS THEN raise_application_error(-20001,'alg_m999 Locatie kan nog niet verwijderd worden. Er zijn nog lopende meldingen'); END; DELETE FROM cad_tekening WHERE alg_locatie_key=:old.alg_locatie_key; END IF; END; / CREATE_TRIGGER(alg_t_alg_terreinsector_B_IU) BEFORE INSERT OR UPDATE ON alg_terreinsector FOR EACH ROW BEGIN UPDATE_PRIMARY_KEY(alg_terreinsector_key, alg_s_alg_onroerendgoed_keys); UPDATE_UPPER(alg_terreinsector_code,alg_terreinsector_upper,alg_terreinsector); UPDATE_AANMAAKDATUM(alg_terreinsector, alg_terreinsector_aanmaak); SET_VERWIJDER_CHILDREN_DEELT(ins_deel, alg_terreinsector_key, alg_terreinsector_verwijder, NULL, ins_deel_verwijder, ins_alg_ruimte_key, NULL); IF :new.alg_terreinsector_verwijder IS NOT NULL AND :old.alg_terreinsector_verwijder IS NULL THEN DECLARE dummy CHAR; BEGIN SELECT 'x' INTO dummy FROM cnt_v_aanwezigcontract_plaats, cnt_v_aanwezigcontract WHERE cnt_v_aanwezigcontract_plaats.cnt_contract_key = cnt_v_aanwezigcontract.cnt_contract_key AND cnt_v_aanwezigcontract.cnt_contract_looptijd_tot > sysdate AND cnt_v_aanwezigcontract_plaats.cnt_alg_plaats_key = :old.alg_terreinsector_key AND cnt_v_aanwezigcontract_plaats.cnt_alg_plaats_code = 'T'; raise_application_error(-20000,'cnt_m027'); EXCEPTION WHEN NO_DATA_FOUND THEN NULL; WHEN TOO_MANY_ROWS THEN raise_application_error(-20000,'cnt_m027'); END; DECLARE dummy CHAR; BEGIN SELECT 'x' INTO dummy FROM mld_melding WHERE mld_alg_onroerendgoed_keys=:old.alg_terreinsector_key AND fac_activiteit_key IS NULL AND mld_melding_status IN (0,2,3,4,7); raise_application_error(-20001, 'alg_m999 Terrein kan nog niet verwijderd worden. Er zijn nog lopende meldingen'); EXCEPTION WHEN NO_DATA_FOUND THEN NULL; WHEN TOO_MANY_ROWS THEN raise_application_error(-20001, 'alg_m999 Terrein kan nog niet verwijderd worden. Er zijn nog lopende meldingen'); END; /* Terrein kent geen bezoekers */ END IF; END; / CREATE_TRIGGER(alg_t_alg_srtgebouw_B_IU) BEFORE INSERT OR UPDATE ON alg_srtgebouw FOR EACH ROW BEGIN UPDATE_PRIMARY_KEY(alg_srtgebouw_key, alg_s_alg_srtgebouw_key); UPDATE_UPPER(alg_srtgebouw_omschrijving, alg_srtgebouw_upper,alg_srtgebouw); CHECK_NOG_REFERENCES(alg_srtgebouw, alg_srtgebouw_verwijder, alg_v_aanweziggebouw, alg_srtgebouw_key, 'alg_m022'); UPDATE_AANMAAKDATUM(alg_srtgebouw, alg_srtgebouw_aanmaak); END; / CREATE_TRIGGER(alg_t_alg_gebouw_B_IU) BEFORE INSERT OR UPDATE ON alg_gebouw FOR EACH ROW BEGIN UPDATE_PRIMARY_KEY(alg_gebouw_key, alg_s_alg_onroerendgoed_keys); UPDATE_UPPER(alg_gebouw_code, alg_gebouw_upper,alg_gebouw); UPDATE_AANMAAKDATUM(alg_gebouw, alg_gebouw_aanmaak); LAAT_VERDIEPING_VERVALLEN_VOOR_GEBOUW('alg_m54'); IF :new.alg_gebouw_verwijder IS NOT NULL AND :old.alg_gebouw_verwijder IS NULL THEN DECLARE dummy CHAR; BEGIN SELECT 'x' INTO dummy FROM cnt_v_aanwezigcontract_plaats, cnt_v_aanwezigcontract WHERE cnt_v_aanwezigcontract_plaats.cnt_contract_key = cnt_v_aanwezigcontract.cnt_contract_key AND cnt_v_aanwezigcontract.cnt_contract_looptijd_tot > sysdate AND cnt_v_aanwezigcontract_plaats.cnt_alg_plaats_key = :old.alg_gebouw_key AND cnt_v_aanwezigcontract_plaats.cnt_alg_plaats_code = 'G'; raise_application_error(-20000,'cnt_m026'); EXCEPTION WHEN NO_DATA_FOUND THEN NULL; WHEN TOO_MANY_ROWS THEN raise_application_error(-20000,'cnt_m026'); END; DECLARE dummy CHAR; BEGIN SELECT 'x' INTO dummy FROM mld_melding WHERE mld_alg_onroerendgoed_keys = :OLD.alg_gebouw_key AND fac_activiteit_key IS NULL AND mld_melding_status IN (0,2,3,4,7); raise_application_error(-20001, 'alg_m999 Gebouw kan nog niet verwijderd worden. Er zijn nog lopende meldingen'); EXCEPTION WHEN NO_DATA_FOUND THEN NULL; WHEN TOO_MANY_ROWS THEN raise_application_error(-20001, 'alg_m999 Gebouw kan nog niet verwijderd worden. Er zijn nog lopende meldingen'); END; /* Wissen laat een ingevulde locatie_key over, wat goed is */ UPDATE bez_afspraak SET alg_onrgoed_keys = NULL WHERE alg_onrgoed_keys = :NEW.alg_gebouw_key AND bez_afspraak_datum > SYSDATE; END IF; END; / CREATE_TRIGGER(alg_t_alg_verdieping_B_IU) BEFORE INSERT OR UPDATE ON alg_verdieping FOR EACH ROW BEGIN UPDATE_PRIMARY_KEY(alg_verdieping_key, alg_s_alg_onroerendgoed_keys); UPDATE_UPPER(alg_verdieping_omschrijving, alg_verdieping_upper,alg_verdieping); UPDATE_AANMAAKDATUM(alg_verdieping, alg_verdieping_aanmaak); LAAT_RUIMTE_VERVALLEN_VOOR_VERDIEPING('alg_m55'); IF :new.alg_verdieping_verwijder IS NOT NULL AND :old.alg_verdieping_verwijder IS NULL THEN DECLARE dummy CHAR; BEGIN SELECT 'x' INTO dummy FROM cnt_v_aanwezigcontract_plaats, cnt_v_aanwezigcontract WHERE cnt_v_aanwezigcontract_plaats.cnt_contract_key = cnt_v_aanwezigcontract.cnt_contract_key AND cnt_v_aanwezigcontract.cnt_contract_looptijd_tot > sysdate AND cnt_v_aanwezigcontract_plaats.cnt_alg_plaats_key = :old.alg_verdieping_key AND cnt_v_aanwezigcontract_plaats.cnt_alg_plaats_code = 'V'; raise_application_error(-20000,'cnt_m025'); EXCEPTION WHEN NO_DATA_FOUND THEN NULL; WHEN TOO_MANY_ROWS THEN raise_application_error(-20000,'cnt_m025'); END; DECLARE dummy CHAR; BEGIN SELECT 'x' INTO dummy FROM mld_melding WHERE mld_alg_onroerendgoed_keys=:old.alg_verdieping_key AND fac_activiteit_key IS NULL AND mld_melding_status IN (0,2,3,4,7); raise_application_error(-20001, 'alg_m999 Verdieping kan nog niet verwijderd worden. Er zijn nog lopende meldingen'); EXCEPTION WHEN NO_DATA_FOUND THEN NULL; WHEN TOO_MANY_ROWS THEN raise_application_error(-20001, 'alg_m999 Verdieping kan nog niet verwijderd worden. Er zijn nog lopende meldingen'); END; DELETE FROM cad_tekening WHERE alg_verdieping_key=:old.alg_verdieping_key; UPDATE bez_afspraak SET alg_onrgoed_keys = :NEW.alg_gebouw_key WHERE alg_onrgoed_keys = :NEW.alg_verdieping_key AND bez_afspraak_datum > SYSDATE; END IF; END; / CREATE_TRIGGER(alg_t_alg_srtruimte_B_IU) BEFORE INSERT OR UPDATE ON alg_srtruimte FOR EACH ROW BEGIN UPDATE_PRIMARY_KEY(alg_srtruimte_key, alg_s_alg_srtruimte_key); UPDATE_UPPER(alg_srtruimte_omschrijving, alg_srtruimte_upper,alg_srtruimte); UPDATE_AANMAAKDATUM(alg_srtruimte, alg_srtruimte_aanmaak); CHECK_NOG_REFERENCES(alg_srtruimte, alg_srtruimte_verwijder, alg_v_aanwezigruimte, alg_srtruimte_key, 'alg_m041'); END; / CREATE_TRIGGER(alg_t_alg_srtruimte_lg_B_IU) BEFORE INSERT OR UPDATE ON alg_srtruimte_locatiegebouw FOR EACH ROW BEGIN UPDATE_PRIMARY_KEY(alg_srtruimte_lg_key, alg_s_alg_srtruimte_lg_key); END; / CREATE_TRIGGER(alg_t_alg_ruimte_B_IU) BEFORE INSERT OR UPDATE ON alg_ruimte FOR EACH ROW BEGIN UPDATE_PRIMARY_KEY(alg_ruimte_key, alg_s_alg_onroerendgoed_keys); UPDATE_UPPER(alg_ruimte_nr, alg_ruimte_upper_nr,alg_ruimte); UPDATE_AANMAAKDATUM(alg_ruimte, alg_ruimte_aanmaak); /* Als de soort ruimte veranderd wordt en er zijn werkplekken in de ruimte * dan moet het veld PRS_BEVAT_WERKPLEKKEN de waarde 1 bevatten in de * nieuwe soort ruimte. */ IF :old.alg_ruimte_key IS NOT NULL AND :new.alg_ruimte_verwijder IS NULL AND :old.alg_srtruimte_key <> :new.alg_srtruimte_key THEN DECLARE dummy CHAR; BEGIN SELECT 'x' INTO dummy FROM alg_srtruimte ALG_SR_1, alg_srtruimte ALG_SR_2, prs_werkplek PRS_W WHERE ALG_SR_1.alg_srtruimte_key = :old.alg_srtruimte_key AND ALG_SR_1.prs_bevat_werkplek = 1 AND ALG_SR_2.alg_srtruimte_key = :new.alg_srtruimte_key AND ALG_SR_2.prs_bevat_werkplek IS NULL AND PRS_W.prs_alg_ruimte_key = :new.alg_ruimte_key; raise_application_error(-20000, 'prs_m034'); EXCEPTION WHEN NO_DATA_FOUND THEN NULL; WHEN TOO_MANY_ROWS THEN raise_application_error(-20000, 'prs_m034'); END; END IF; IF :new.alg_ruimte_verwijder IS NOT NULL AND :old.alg_ruimte_verwijder IS NULL THEN DECLARE dummy CHAR; BEGIN SELECT 'x' INTO dummy FROM cnt_v_aanwezigcontract_plaats, cnt_v_aanwezigcontract WHERE cnt_v_aanwezigcontract_plaats.cnt_contract_key = cnt_v_aanwezigcontract.cnt_contract_key AND cnt_v_aanwezigcontract.cnt_contract_looptijd_tot > sysdate AND cnt_v_aanwezigcontract_plaats.cnt_alg_plaats_key = :old.alg_ruimte_key AND cnt_v_aanwezigcontract_plaats.cnt_alg_plaats_code = 'R'; raise_application_error(-20000,'cnt_m024'); EXCEPTION WHEN NO_DATA_FOUND THEN NULL; WHEN TOO_MANY_ROWS THEN raise_application_error(-20000,'cnt_m024'); END; DECLARE dummy CHAR; BEGIN SELECT 'X' INTO dummy FROM (SELECT 'X' FROM res_rsv_ruimte r, res_ruimte_opstelling ro, res_ruimte rr, res_alg_ruimte ra WHERE r.res_rsv_ruimte_verwijder IS NULL AND r.res_ruimte_opstel_key = ro.res_ruimte_opstel_key AND ro.res_ruimte_key = rr.res_ruimte_key AND rr.res_ruimte_key = ra.res_ruimte_key AND r.res_status_bo_key < 5 AND ra.alg_ruimte_key = :OLD.alg_ruimte_key AND res_rsv_ruimte_tot > SYSDATE-14 -- na 14 dagen niet meer klagen AND ra.res_alg_ruimte_verwijder IS NULL UNION ALL SELECT 'X' FROM res_rsv_ruimte rr, res_rsv_artikel ra WHERE rr.alg_ruimte_key = :OLD.alg_ruimte_key AND rr.res_rsv_ruimte_verwijder IS NULL AND rr.RES_RSV_RUIMTE_KEY = ra.RES_RSV_RUIMTE_KEY AND ra.res_rsv_artikel_verwijder IS NULL AND res_rsv_ruimte_tot > SYSDATE-14 AND ra.res_status_bo_key < 5 UNION ALL SELECT 'X' FROM res_rsv_ruimte rr, res_rsv_deel rd WHERE rr.alg_ruimte_key = :OLD.alg_ruimte_key AND rr.res_rsv_ruimte_verwijder IS NULL AND rr.RES_RSV_RUIMTE_KEY = rd.RES_RSV_RUIMTE_KEY AND rd.res_rsv_deel_verwijder IS NULL AND res_rsv_ruimte_tot > SYSDATE-14 AND rd.res_status_bo_key < 5); raise_application_error(-20000, 'res_m039'); EXCEPTION WHEN NO_DATA_FOUND THEN NULL; WHEN TOO_MANY_ROWS THEN raise_application_error(-20000, 'res_m039'); END; DECLARE dummy CHAR; BEGIN SELECT 'x' INTO dummy FROM mld_melding WHERE mld_alg_onroerendgoed_keys=:old.alg_ruimte_key AND fac_activiteit_key IS NULL AND mld_melding_status IN (0,2,3,4,7); raise_application_error(-20001, 'Ruimte kan nog niet verwijderd worden. Er zijn nog lopende meldingen'); EXCEPTION WHEN NO_DATA_FOUND THEN NULL; WHEN TOO_MANY_ROWS THEN raise_application_error(-20001, 'alg_m999 Ruimte kan nog niet verwijderd worden. Er zijn nog lopende meldingen'); END; DECLARE dummy CHAR; BEGIN SELECT 'x' INTO dummy FROM ins_deel WHERE ins_alg_ruimte_key=:old.alg_ruimte_key AND ins_deel_verwijder IS NULL AND ins_alg_ruimte_type = 'R'; raise_application_error(-20001, 'alg_m999 Ruimte kan nog niet verwijderd worden. Er zijn nog objecten'); EXCEPTION WHEN NO_DATA_FOUND THEN NULL; WHEN TOO_MANY_ROWS THEN raise_application_error(-20001, 'alg_m999 Ruimte kan nog niet verwijderd worden. Er zijn nog objecten'); END; UPDATE res_alg_ruimte SET res_alg_ruimte_verwijder = :NEW.alg_ruimte_verwijder WHERE alg_ruimte_key = :NEW.alg_ruimte_key AND res_alg_ruimte_verwijder IS NULL; -- FSN#17457 UPDATE prs_ruimteafdeling SET prs_ruimteafdeling_verwijder = :NEW.alg_ruimte_verwijder WHERE alg_ruimte_key = :NEW.alg_ruimte_key AND prs_ruimteafdeling_verwijder IS NULL; /* toekomstig bezoek degraderen naar verdieping */ UPDATE bez_afspraak SET alg_onrgoed_keys = :NEW.alg_verdieping_key WHERE alg_onrgoed_keys = :NEW.alg_ruimte_key AND bez_afspraak_datum > SYSDATE; DELETE FROM prs_werkplek WHERE prs_werkplek.prs_alg_ruimte_key = :new.alg_ruimte_key; END IF; END; / CREATE_TRIGGER(alg_t_alg_kenmerk_b_iu) BEFORE INSERT OR UPDATE ON alg_kenmerk FOR EACH ROW BEGIN UPDATE_PRIMARY_KEY(alg_kenmerk_key, alg_s_alg_kenmerk_key); UPDATE_UPPER(alg_kenmerk_omschrijving, alg_kenmerk_upper, alg_kenmerk); UPDATE_UPPER(alg_kenmerk_code, alg_kenmerk_code, alg_kenmerk); IF (:new.alg_kenmerk_verwijder IS NOT NULL AND :old.alg_kenmerk_verwijder IS NULL AND :new.alg_kenmerk_systeem = 1) THEN raise_application_error(-20000, 'ALG_M238'); END IF; IF :new.alg_kenmerk_kenmerktype IN ('C', 'N', 'B') AND :new.alg_kenmerk_lengte IS NULL THEN raise_application_error(-20000, 'ALG_C_ALG_KENMERK_LENGTE'); END IF; -- Numeriek mag niet te lang zijn (numeric overflow) IF :new.alg_kenmerk_kenmerktype IN ('N', 'B') AND :new.alg_kenmerk_lengte > 20 THEN :new.alg_kenmerk_lengte := 20; END IF; IF :new.alg_kenmerk_kenmerktype IN ('N', 'B') AND :old.alg_kenmerk_key IS NOT NULL THEN IF :old.alg_kenmerk_nmin <> :new.alg_kenmerk_nmin OR :old.alg_kenmerk_nmin IS NULL AND :new.alg_kenmerk_nmin IS NOT NULL THEN DECLARE Dummy CHAR; BEGIN SELECT 'X' INTO Dummy FROM alg_onrgoedkenmerk WHERE alg_kenmerk_key = :old.alg_kenmerk_key AND alg_kenmerk_key IN (SELECT alg_kenmerk_key FROM alg_onrgoedkenmerk WHERE alg_kenmerk_key = :old.alg_kenmerk_key AND FAC.SAFE_TO_NUMBER(alg_onrgoedkenmerk_waarde) < :new.alg_kenmerk_nmin AND rownum=1); IF :new.alg_kenmerk_niveau = 'G' THEN raise_application_error(-20000, 'ALG_C_ALG_KENMERK_MIN_G'); ELSE raise_application_error(-20000, 'ALG_C_ALG_KENMERK_MIN_R'); END IF; EXCEPTION WHEN NO_DATA_FOUND THEN NULL; WHEN TOO_MANY_ROWS THEN BEGIN IF :new.alg_kenmerk_niveau = 'G' THEN raise_application_error(-20000, 'ALG_C_ALG_KENMERK_MIN_G'); ELSE raise_application_error(-20000, 'ALG_C_ALG_KENMERK_MIN_R'); END IF; END; END; END IF; IF :old.alg_kenmerk_nmax <> :new.alg_kenmerk_nmax OR :old.alg_kenmerk_nmax IS NULL AND :new.alg_kenmerk_nmax IS NOT NULL THEN DECLARE Dummy CHAR; BEGIN SELECT 'X' INTO Dummy FROM alg_onrgoedkenmerk WHERE alg_kenmerk_key = :old.alg_kenmerk_key AND alg_kenmerk_key IN (SELECT alg_kenmerk_key FROM alg_onrgoedkenmerk WHERE alg_kenmerk_key = :old.alg_kenmerk_key AND FAC.SAFE_TO_NUMBER(alg_onrgoedkenmerk_waarde) > :new.alg_kenmerk_nmax AND rownum=1); IF :new.alg_kenmerk_niveau = 'G' THEN raise_application_error(-20000, 'ALG_C_ALG_KENMERK_MAX_G'); ELSE raise_application_error(-20000, 'ALG_C_ALG_KENMERK_MAX_R'); END IF; EXCEPTION WHEN NO_DATA_FOUND THEN NULL; WHEN TOO_MANY_ROWS THEN BEGIN IF :new.alg_kenmerk_niveau = 'G' THEN raise_application_error(-20000, 'ALG_C_ALG_KENMERK_MAX_G'); ELSE raise_application_error(-20000, 'ALG_C_ALG_KENMERK_MAX_R'); END IF; END; END; END IF; END IF; UPDATE_AANMAAKDATUM(alg_kenmerk, alg_kenmerk_aanmaak); END; / CREATE_TRIGGER(alg_t_alg_onrgoedkenmerk_b_iu) BEFORE INSERT OR UPDATE ON alg_onrgoedkenmerk FOR EACH ROW BEGIN UPDATE_AANMAAKDATUM(alg_onrgoedkenmerk, alg_onrgoedkenmerk_aanmaak); /* ** Controleer eerst of de ingevulde waarde goed is. */ IF :new.alg_onrgoedkenmerk_waarde <> :old.alg_onrgoedkenmerk_waarde OR :old.alg_onrgoedkenmerk_waarde IS NULL OR :new.alg_onrgoedkenmerk_waarde IS NULL THEN DECLARE KenmerkOmschr alg_kenmerk.alg_kenmerk_omschrijving%TYPE; KenmerkType alg_kenmerk.alg_kenmerk_kenmerktype%TYPE; KenmerkLengte alg_kenmerk.alg_kenmerk_lengte%TYPE; KenmerkDec alg_kenmerk.alg_kenmerk_dec%TYPE; KenmerkNMin alg_kenmerk.alg_kenmerk_nmin%TYPE; KenmerkNMax alg_kenmerk.alg_kenmerk_nmax%TYPE; RefKenmerkKey NUMBER(10); NumberWaarde NUMBER(25,5); FormatMask VARCHAR2(60); KenmerkWaarde alg_onrgoedkenmerk.alg_onrgoedkenmerk_waarde%TYPE; BEGIN KenmerkWaarde := :new.alg_onrgoedkenmerk_waarde; BEGIN DECLARE dummy VARCHAR2(1); BEGIN IF :new.alg_onrgoed_niveau = 'G' THEN SELECT 'X' INTO dummy FROM alg_gebouw WHERE alg_gebouw_key = :new.alg_onrgoed_key; ELSIF :new.alg_onrgoed_niveau = 'R' THEN SELECT 'X' INTO dummy FROM alg_ruimte WHERE alg_ruimte_key = :new.alg_onrgoed_key; END IF; EXCEPTION WHEN NO_DATA_FOUND THEN raise_application_error(-20000, 'ALG_M015'); END; SELECT alg_kenmerk_omschrijving , alg_kenmerk_kenmerktype , alg_kenmerk_lengte , alg_kenmerk_dec , alg_kenmerk_nmin , alg_kenmerk_nmax INTO KenmerkOmschr , KenmerkType , KenmerkLengte , KenmerkDec , KenmerkNMin , KenmerkNMax FROM alg_kenmerk WHERE alg_kenmerk_key = :new.alg_kenmerk_key; EXCEPTION WHEN NO_DATA_FOUND THEN raise_application_error(-20000,'INS_R_INS_KENMERK_KEY1'); END; /* Kijk welk KenmerkType gebruikt wordt. ** Aan de hand daarvan moet een controle uitgevoerd worden. **/ IF KenmerkType = 'C' /* ** Char */ THEN /* ** Controleer of de lengte te groot of goed is */ IF LENGTH(KenmerkWaarde) > KenmerkLengte THEN APPLICATION_ERROR_GOTO(-20004, 'ALG_M232,'|| KenmerkOmschr ||',' || TO_CHAR(KenmerkLengte)); END IF; ELSIF KenmerkType IN ('N', 'B') /* ** Number */ THEN /* ** Controleer of er een numerieke waarde ingevuld is */ IF KenmerkDec IS NULL OR KenmerkDec = 0 THEN FormatMask := RPAD('9', KenmerkLengte, '9'); ELSE FormatMask := RPAD('9', KenmerkLengte - KenmerkDec, '9') ||'D'||RPAD('9', KenmerkDec, '9'); END IF; /* ** Controleer of er een numerieke waarde ingevuld is */ BEGIN NumberWaarde := TO_NUMBER(KenmerkWaarde); EXCEPTION WHEN OTHERS THEN FormatMask := REPLACE(FormatMask, '9', '#'); FormatMask := REPLACE(FormatMask, '0', '#'); FormatMask := REPLACE(FormatMask, 'D', '.'); APPLICATION_ERROR_GOTO(-20004,'ALG_M233,'|| KenmerkOmschr ||',' || FormatMask); END; /* ** Controleer of de waarde binnen NMin en NMax ligt */ IF ( (KenmerkNMin IS NOT NULL AND NumberWaarde < KenmerkNMin) OR (KenmerkNMax IS NOT NULL AND NumberWaarde > KenmerkNMax)) THEN APPLICATION_ERROR_GOTO(-20004, 'ALG_M234,'|| KenmerkOmschr ||',' || TO_CHAR(KenmerkNMin)||',' || TO_CHAR(KenmerkNMax)); ELSE /* ** Controleer of de waarde aan het formaat voldoet */ KenmerkWaarde := LTRIM(NUMBER_TO_CHAR(NumberWaarde, FormatMask)); IF INSTR2(KenmerkWaarde, '#') <> 0 THEN FormatMask := REPLACE(FormatMask, '9', '#'); FormatMask := REPLACE(FormatMask, '0', '#'); FormatMask := REPLACE(FormatMask, 'D', '.'); APPLICATION_ERROR_GOTO(-20004,'ALG_M233,'|| KenmerkOmschr ||',' || FormatMask); END IF; END IF; /* ** Zet de geconverteerde waarde terug */ :new.alg_onrgoedkenmerk_waarde := KenmerkWaarde; ELSIF KenmerkType = 'D' /* ** Datum */ THEN KenmerkWaarde := DATE_TO_CHAR(_TO_DATE2(KenmerkWaarde,'DD-MM-YY'),'DD-MM-YYYY'); /* ** Zet de geconverteerde waarde terug */ :new.alg_onrgoedkenmerk_waarde := KenmerkWaarde; END IF; END; UPDATE_PRIMARY_KEY(alg_onrgoedkenmerk_key, alg_s_alg_onrgoedkenmerk_key); END IF; END; / CREATE_TRIGGER(alg_t_alg_srtterreinsec_B_IU) BEFORE INSERT OR UPDATE ON alg_srtterreinsector FOR EACH ROW BEGIN UPDATE_PRIMARY_KEY(alg_srtterreinsector_key, alg_s_alg_srtterrein_key); UPDATE_UPPER(alg_srtterreinsec_omschrijving, alg_srtterreinsector_upper,alg_srtterreinsector); UPDATE_AANMAAKDATUM(alg_srtterreinsector, alg_srtterreinsector_aanmaak); CHECK_NOG_REFERENCES(alg_srtterreinsector, alg_srtterreinsector_verwijder, alg_v_aanwezigterreinsector, alg_srtterreinsector_key, 'alg_m041'); END; / CREATE_TRIGGER(alg_t_alg_algfaq_B_I) BEFORE INSERT ON alg_algfaq FOR EACH ROW BEGIN UPDATE_PRIMARY_KEY(alg_algfaq_key, alg_s_alg_algfaq_key); END; / CREATE_TRIGGER(alg_t_alg_algfaq_B_IU) BEFORE INSERT OR UPDATE ON alg_algfaq FOR EACH ROW BEGIN IF :new.alg_onroerendgoed_keys IS NOT NULL THEN CHECK_REFERENCE_ONROERENDGOED(alg_onroerendgoed_keys, 'alg_m239 alg_onroerendgoed_keys ('|| :new.alg_onroerendgoed_keys ||') bestaat niet'); END IF; END; / REGISTERRUN('$Id$')