796 lines
28 KiB
Plaintext
796 lines
28 KiB
Plaintext
/* Triggers voor ALG-module
|
|
*
|
|
* 10-11-2003 RL alg_t_alg_srtterreinsector_B_IU created for FSN 516.
|
|
* 07-05-2003 RL alg_t_alg_onrgoedkenmerk_b_iu: INSTR -> INSTR2, select .nextval in #ifdef
|
|
* 23-04-2003 BIV FSN#203 : Trigger alg_t_alg_kenmerk_b_iu aangepast.
|
|
*/
|
|
|
|
#include "comsql.h"
|
|
#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);
|
|
// 10-07-97 AH #1367, Restricted verwijderen op district
|
|
//SET_VERWIJDER_CHILDREN(alg_district, alg_regio_key, alg_regio_verwijder, alg_district_verwijder);
|
|
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);
|
|
// 28-04-99 PF UPDATE_UPPER(alg_district_code, alg_district_code);
|
|
UPDATE_UPPER(alg_district_omschrijving, alg_district_upper,alg_district);
|
|
// 10-07-97 AH #1367, Restricted verwijderen op locatie
|
|
//SET_VERWIJDER_CHILDREN(alg_locatie, alg_district_key, alg_district_verwijder, alg_locatie_verwijder);
|
|
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);
|
|
// 10-07-97 AH #1367, Restricted verwijderen op Gebouw en Terreinsector
|
|
|
|
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 THEN
|
|
DECLARE
|
|
dummy CHAR;
|
|
BEGIN
|
|
SELECT 'x'
|
|
INTO dummy
|
|
FROM cnt_v_aanwezigcontract_plaats
|
|
WHERE 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;
|
|
END IF;
|
|
IF :new.alg_locatie_verwijder IS NOT NULL AND :old.alg_locatie_verwijder IS NULL THEN
|
|
THEN
|
|
DELETE FROM cad_tekening WHERE alg_locatie_key=:old.alg_locatie_key;
|
|
END IF;
|
|
#ifdef MS_SQL
|
|
lerror:
|
|
#endif
|
|
END;
|
|
/
|
|
|
|
CREATE_TRIGGER(alg_t_alg_terreinsector_B_IU)
|
|
BEFORE INSERT OR UPDATE ON alg_terreinsector
|
|
FOR EACH ROW
|
|
BEGIN
|
|
-- LET OP : Deze trigger is ook gedefinieerd ins ALG !!
|
|
UPDATE_PRIMARY_KEY(alg_terreinsector_key, alg_s_alg_onroerendgoed_keys);
|
|
|
|
:new.alg_terreinsector_omschrijving := SUBSTRB(:new.alg_terreinsector_code ||' - '|| :new.alg_terreinsector_naam,1,50);
|
|
|
|
UPDATE_UPPER(alg_terreinsector_code,alg_terreinsector_upper,alg_terreinsector);
|
|
UPDATE_AANMAAKDATUM(alg_terreinsector, alg_terreinsector_aanmaak);
|
|
CHECK_CADMUTATIE(alg_terreinsector_verwijder, alg_terreinsector_getekend, 'alg_m243',alg_terreinsector);
|
|
//<INS>
|
|
SET_VERWIJDER_CHILDREN_DEEL(ins_deel, alg_terreinsector_key, alg_terreinsector_verwijder,alg_terreinsector_getekend,
|
|
ins_deel_verwijder, ins_alg_ruimte_key, ins_deel_getekend);
|
|
//</INS>
|
|
IF :new.alg_terreinsector_verwijder IS NOT NULL THEN
|
|
DECLARE
|
|
dummy CHAR;
|
|
BEGIN
|
|
SELECT 'x'
|
|
INTO dummy
|
|
FROM cnt_v_aanwezigcontract_plaats
|
|
WHERE 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;
|
|
/* CONN#465 */
|
|
DECLARE
|
|
dummy CHAR;
|
|
BEGIN
|
|
SELECT 'x'
|
|
INTO dummy
|
|
FROM cnt_contract_onrgoed co
|
|
WHERE co.ALG_ONRGOED_KEY = :old.alg_terreinsector_key
|
|
AND co.ALG_ONRGOED_NIVEAU = 'T';
|
|
APPLICATION_ERROR_GOTO(-20000,'Terrein heeft nog huurcontract');
|
|
EXCEPTION
|
|
WHEN NO_DATA_FOUND THEN NULL;
|
|
WHEN TOO_MANY_ROWS THEN APPLICATION_ERROR_GOTO(-20000,'Terrein heeft nog huurcontract');
|
|
END;
|
|
END IF;
|
|
#ifdef MS_SQL
|
|
lerror:
|
|
#endif
|
|
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);
|
|
:new.alg_gebouw_omschrijving := SUBSTRB(:new.alg_gebouw_code ||' - '|| :new.alg_gebouw_naam,1,30);
|
|
CHECK_CADMUTATIE(alg_gebouw_verwijder, alg_gebouw_getekend, 'alg_m244',alg_gebouw);
|
|
LAAT_VERDIEPING_VERVALLEN_VOOR_GEBOUW('alg_m54');
|
|
//<CNT>
|
|
IF :new.alg_gebouw_verwijder IS NOT NULL THEN
|
|
DECLARE
|
|
dummy CHAR;
|
|
BEGIN
|
|
SELECT 'x'
|
|
INTO dummy
|
|
FROM cnt_v_aanwezigcontract_plaats
|
|
WHERE cnt_v_aanwezigcontract_plaats.cnt_alg_plaats_key = :old.alg_gebouw_key
|
|
AND cnt_v_aanwezigcontract_plaats.cnt_alg_plaats_code = 'G';
|
|
APPLICATION_ERROR_GOTO(-20000,'cnt_m026');
|
|
EXCEPTION
|
|
WHEN NO_DATA_FOUND THEN NULL;
|
|
WHEN TOO_MANY_ROWS THEN APPLICATION_ERROR_GOTO(-20000,'cnt_m026');
|
|
END;
|
|
END IF;
|
|
//</CNT>
|
|
|
|
#ifdef MS_SQL
|
|
lerror:
|
|
#endif
|
|
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');
|
|
//<CNT>
|
|
IF :new.alg_verdieping_verwijder IS NOT NULL THEN
|
|
DECLARE
|
|
dummy CHAR;
|
|
BEGIN
|
|
SELECT 'x'
|
|
INTO dummy
|
|
FROM cnt_v_aanwezigcontract_plaats
|
|
WHERE cnt_v_aanwezigcontract_plaats.cnt_alg_plaats_key = :old.alg_verdieping_key
|
|
AND cnt_v_aanwezigcontract_plaats.cnt_alg_plaats_code = 'V';
|
|
APPLICATION_ERROR_GOTO(-20000,'cnt_m025');
|
|
EXCEPTION
|
|
WHEN NO_DATA_FOUND THEN NULL;
|
|
WHEN TOO_MANY_ROWS THEN APPLICATION_ERROR_GOTO(-20000,'cnt_m025');
|
|
END;
|
|
END IF;
|
|
//</CNT>
|
|
IF :new.alg_verdieping_verwijder IS NOT NULL AND :old.alg_verdieping_verwijder IS NULL THEN
|
|
THEN
|
|
DELETE FROM cad_tekening WHERE alg_verdieping_key=:old.alg_verdieping_key;
|
|
END IF;
|
|
#ifdef MS_SQL
|
|
lerror:
|
|
#endif
|
|
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');
|
|
|
|
//<PRS>
|
|
IF :old.alg_srtruimte_key IS NOT NULL
|
|
AND :old.prs_bevat_werkplek = 1 AND :new.prs_bevat_werkplek IS NULL
|
|
THEN
|
|
DECLARE
|
|
dummy NUMBER;
|
|
BEGIN
|
|
SELECT COUNT(PRS_W.prs_werkplek_key)
|
|
INTO dummy
|
|
FROM alg_v_aanwezigruimte ALG_R, prs_v_aanwezigwerkplek PRS_W
|
|
WHERE ALG_R.alg_srtruimte_key = :old.alg_srtruimte_key
|
|
AND PRS_W.prs_alg_ruimte_key = ALG_R.alg_ruimte_key;
|
|
IF dummy > 0
|
|
THEN
|
|
APPLICATION_ERROR(-20000, 'prs_m035');
|
|
END IF;
|
|
#ifndef MS_SQL
|
|
EXCEPTION
|
|
WHEN NO_DATA_FOUND
|
|
THEN NULL;
|
|
#endif
|
|
END;
|
|
END IF;
|
|
//</PRS>
|
|
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);
|
|
CHECK_CADMUTATIE(alg_ruimte_verwijder, alg_ruimte_getekend, 'alg_m245',alg_ruimte);
|
|
|
|
/* 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,
|
|
all_v_aanwezigwerkplek 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;
|
|
APPLICATION_ERROR_GOTO(-20000, 'prs_m034');
|
|
EXCEPTION
|
|
WHEN NO_DATA_FOUND
|
|
THEN NULL;
|
|
WHEN TOO_MANY_ROWS
|
|
THEN APPLICATION_ERROR_GOTO(-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
|
|
WHERE cnt_v_aanwezigcontract_plaats.cnt_alg_plaats_key = :old.alg_ruimte_key
|
|
AND cnt_v_aanwezigcontract_plaats.cnt_alg_plaats_code = 'R';
|
|
APPLICATION_ERROR_GOTO(-20000,'cnt_m024');
|
|
EXCEPTION
|
|
WHEN NO_DATA_FOUND THEN NULL;
|
|
WHEN TOO_MANY_ROWS THEN APPLICATION_ERROR_GOTO(-20000,'cnt_m024');
|
|
END;
|
|
/* CONN#465 */
|
|
DECLARE
|
|
dummy CHAR;
|
|
BEGIN
|
|
SELECT 'x'
|
|
INTO dummy
|
|
FROM cnt_contract_onrgoed co
|
|
WHERE co.ALG_ONRGOED_KEY = :old.alg_ruimte_key
|
|
AND co.ALG_ONRGOED_NIVEAU = 'R';
|
|
APPLICATION_ERROR_GOTO(-20000,'Ruimte heeft nog huurcontract');
|
|
EXCEPTION
|
|
WHEN NO_DATA_FOUND THEN NULL;
|
|
WHEN TOO_MANY_ROWS THEN APPLICATION_ERROR_GOTO(-20000,'Ruimte heeft nog huurcontract');
|
|
END;
|
|
END IF;
|
|
|
|
/* Als de ruimte verwijderd wordt, dan moeten ook de bijbehorende
|
|
* werkplekken/slaapplaatsen verwijderd worden.
|
|
*/
|
|
IF :new.alg_ruimte_verwijder IS NOT NULL OR
|
|
(:new.alg_ruimte_verwijder IS NULL AND :old.alg_ruimte_verwijder IS NOT NULL)
|
|
THEN
|
|
UPDATE prs_werkplek
|
|
SET prs_werkplek_verwijder = :new.alg_ruimte_verwijder
|
|
, prs_werkplek_getekend = :new.alg_ruimte_getekend
|
|
WHERE prs_werkplek.prs_alg_ruimte_key = :new.alg_ruimte_key
|
|
AND prs_werkplek_verwijder IS NULL;
|
|
|
|
UPDATE ins_deel
|
|
SET ins_deel_verwijder = :new.alg_ruimte_verwijder
|
|
, ins_deel_getekend = :new.alg_ruimte_getekend
|
|
WHERE ins_deel.ins_alg_ruimte_key = :new.alg_ruimte_key
|
|
AND ins_deel_verwijder IS NULL
|
|
AND ins_alg_ruimte_type <> 'W';
|
|
END IF;
|
|
|
|
CHECK_NOG_REFERENCES(alg_ruimte, alg_ruimte_verwijder, res_v_aanwezigalg_ruimte,
|
|
alg_ruimte_key, 'res_m036');
|
|
DECLARE dummy CHAR;
|
|
BEGIN
|
|
IF :NEW.alg_ruimte_verwijder IS NOT NULL THEN
|
|
SELECT MAX('x') INTO dummy FROM res_v_reserveringruimte_geg WHERE res_v_reserveringruimte_geg.alg_ruimte_key = :OLD.alg_ruimte_key;
|
|
END IF;
|
|
IF dummy IS NOT NULL THEN RAISE_APPLICATION_ERROR(-20000, 'res_m039');
|
|
END IF;
|
|
EXCEPTION WHEN OTHERS THEN NULL;
|
|
END;
|
|
|
|
#ifdef MS_SQL
|
|
lerror:
|
|
#endif
|
|
END;
|
|
/
|
|
|
|
CREATE_TRIGGER(alg_t_alg_kostenpost_B_IU)
|
|
BEFORE INSERT OR UPDATE ON alg_kostenpost
|
|
FOR EACH ROW
|
|
BEGIN
|
|
UPDATE_PRIMARY_KEY(alg_kostenpost_key,alg_s_alg_kostenpost_key);
|
|
UPDATE_UPPER(alg_kostenpost_omschrijving,alg_kostenpost_upper,alg_kostenpost);
|
|
UPDATE_AANMAAKDATUM(alg_kostenpost, alg_kostenpost_aanmaak);
|
|
|
|
//<MLD>
|
|
IF :new.alg_kostenpost_verwijder IS NOT NULL
|
|
THEN
|
|
DECLARE
|
|
dummy NUMBER;
|
|
BEGIN
|
|
SELECT COUNT(*)
|
|
INTO dummy
|
|
FROM mld_opdr MLD_O, mld_statusopdr MLD_S
|
|
WHERE MLD_O.mld_alg_kostenpost_key = :old.alg_kostenpost_key
|
|
AND MLD_O.mld_statusopdr_key = MLD_S.mld_statusopdr_key
|
|
AND MLD_S.mld_statusopdr_upper = 'MLD_UITGEGEVEN';
|
|
IF dummy > 0
|
|
THEN
|
|
APPLICATION_ERROR(-20000, 'mld_m152');
|
|
END IF;
|
|
#ifndef MS_SQL
|
|
EXCEPTION
|
|
WHEN NO_DATA_FOUND
|
|
THEN NULL;
|
|
#endif
|
|
//</MLD>
|
|
END;
|
|
END IF;
|
|
END;
|
|
/
|
|
|
|
CREATE_TRIGGER(alg_t_alg_refkenmerk_b_iu)
|
|
BEFORE INSERT OR UPDATE ON alg_refkenmerk
|
|
FOR EACH ROW
|
|
DECLARE
|
|
ObjectType USER_OBJECTS.OBJECT_TYPE%TYPE;
|
|
BEGIN
|
|
UPDATE_PRIMARY_KEY(alg_refkenmerk_key,alg_s_alg_refkenmerk_key);
|
|
UPDATE_UPPER(alg_refkenmerk_omschrijving,alg_refkenmerk_upper,alg_refkenmerk);
|
|
UPDATE_AANMAAKDATUM(alg_refkenmerk, alg_refkenmerk_aanmaak);
|
|
|
|
/* Controleer of de ingevulde tablenaam, kolomnaam en kolomtxt
|
|
** wel bestaan.
|
|
*/
|
|
/* Trigger moet ook afgaan als de omschrijving gewijzigd wordt ...
|
|
|
|
IF :new.alg_refkenmerk_objectnaam <> :old.alg_refkenmerk_objectnaam
|
|
OR :old.alg_refkenmerk_objectnaam IS NULL
|
|
THEN
|
|
*/
|
|
BEGIN
|
|
SELECT OBJECT_TYPE
|
|
INTO ObjectType
|
|
FROM USER_OBJECTS
|
|
WHERE OBJECT_NAME = :new.alg_refkenmerk_objectnaam;
|
|
EXCEPTION
|
|
WHEN NO_DATA_FOUND
|
|
THEN ObjectType := NULL;
|
|
END;
|
|
/* END IF; */
|
|
IF ObjectType IS NULL
|
|
THEN
|
|
APPLICATION_ERROR(-20000, 'ALG_M235');
|
|
ELSIF ObjectType IN ('TABLE','VIEW')
|
|
THEN
|
|
/* Bij een TABLE of VIEW staan de kolommen in USER_TAB_COLUMNS
|
|
** Controleer of deze KOLOMNAAM en KOLOMTXT bestaan.
|
|
**/
|
|
DECLARE
|
|
Dummy VARCHAR2(30);
|
|
BEGIN
|
|
SELECT COLUMN_NAME
|
|
INTO Dummy
|
|
FROM USER_TAB_COLUMNS
|
|
WHERE TABLE_NAME = :new.alg_refkenmerk_objectnaam
|
|
AND COLUMN_NAME = :new.alg_refkenmerk_kolomnaam
|
|
AND DATA_TYPE = 'NUMBER';
|
|
EXCEPTION
|
|
WHEN NO_DATA_FOUND
|
|
THEN APPLICATION_ERROR(-20000, 'ALG_M236');
|
|
END;
|
|
DECLARE
|
|
Dummy VARCHAR2(30);
|
|
BEGIN
|
|
SELECT COLUMN_NAME
|
|
INTO Dummy
|
|
FROM USER_TAB_COLUMNS
|
|
WHERE TABLE_NAME = :new.alg_refkenmerk_objectnaam
|
|
AND COLUMN_NAME = :new.alg_refkenmerk_kolomtxt
|
|
AND DATA_TYPE LIKE '%CHAR%';
|
|
EXCEPTION
|
|
WHEN NO_DATA_FOUND
|
|
THEN APPLICATION_ERROR(-20000, 'ALG_M237');
|
|
END;
|
|
ELSIF ObjectType <> 'SYNONYM'
|
|
THEN
|
|
/* Bij een SYNONYM kan er niet gecontroleerd worden
|
|
* of de ingevulde kolommen bestaan.
|
|
*/
|
|
/* NULL;
|
|
ELSE */
|
|
APPLICATION_ERROR(-20000, 'ALG_M235');
|
|
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);
|
|
|
|
IF (:new.alg_kenmerk_kenmerktype IN ('C','N'))
|
|
AND :new.alg_kenmerk_lengte IS NULL
|
|
THEN
|
|
APPLICATION_ERROR(-20000, 'ALG_C_ALG_KENMERK_LENGTE');
|
|
END IF;
|
|
IF :new.alg_kenmerk_kenmerktype = 'N' 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 _MSSQL(TOP 1) 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
|
|
_ORACLE(AND rownum=1));
|
|
IF :new.alg_kenmerk_niveau = 'G' THEN
|
|
APPLICATION_ERROR(-20000, 'ALG_C_ALG_KENMERK_MIN_G');
|
|
ELSE
|
|
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
|
|
APPLICATION_ERROR(-20000, 'ALG_C_ALG_KENMERK_MIN_G');
|
|
ELSE
|
|
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 _MSSQL(top 1) 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
|
|
_ORACLE(AND rownum=1));
|
|
IF :new.alg_kenmerk_niveau = 'G' THEN
|
|
APPLICATION_ERROR(-20000, 'ALG_C_ALG_KENMERK_MAX_G');
|
|
ELSE
|
|
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
|
|
APPLICATION_ERROR(-20000, 'ALG_C_ALG_KENMERK_MAX_G');
|
|
ELSE
|
|
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_kenmerk_b_d)
|
|
BEFORE DELETE ON alg_kenmerk
|
|
FOR EACH ROW
|
|
BEGIN
|
|
IF :old.alg_kenmerk_systeem IS NOT NULL
|
|
THEN
|
|
APPLICATION_ERROR(-20003, 'ALG_M238');
|
|
ELSE
|
|
DELETE
|
|
FROM alg_onrgoedkenmerk
|
|
WHERE alg_kenmerk_key = :old.alg_kenmerk_key;
|
|
END IF;
|
|
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(15,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 APPLICATION_ERROR_GOTO(-20000, 'ALG_M015');
|
|
END;
|
|
SELECT alg_kenmerk_omschrijving
|
|
, alg_kenmerk_kenmerktype
|
|
, alg_kenmerk_lengte
|
|
, alg_kenmerk_dec
|
|
, alg_kenmerk_nmin
|
|
, alg_kenmerk_nmax
|
|
, alg_refkenmerk_key
|
|
INTO KenmerkOmschr
|
|
, KenmerkType
|
|
, KenmerkLengte
|
|
, KenmerkDec
|
|
, KenmerkNMin
|
|
, KenmerkNMax
|
|
, RefKenmerkKey
|
|
FROM alg_kenmerk
|
|
WHERE alg_kenmerk_key = :new.alg_kenmerk_key;
|
|
EXCEPTION
|
|
WHEN NO_DATA_FOUND
|
|
THEN APPLICATION_ERROR_GOTO(-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(-20004, 'ALG_M232,'|| KenmerkOmschr ||','
|
|
|| TO_CHAR(KenmerkLengte));
|
|
END IF;
|
|
ELSIF KenmerkType = 'N'
|
|
/*
|
|
** 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
|
|
#ifdef MS_SQL
|
|
DECLARE isnum smallint;
|
|
isnum := WEB.IsNumberString(@KenmerkWaarde)
|
|
if isnum = -1 GOTO lcontinue
|
|
if isnum = 0 BEGIN
|
|
FormatMask := REPLACE(FormatMask, '9', '#');
|
|
FormatMask := REPLACE(FormatMask, '0', '#');
|
|
FormatMask := REPLACE(FormatMask, 'D', '.');
|
|
APPLICATION_ERROR_GOTO(-20004,'ALG_M233,'|| KenmerkOmschr ||','|| FormatMask);
|
|
END;
|
|
#endif
|
|
NumberWaarde := TO_NUMBER(KenmerkWaarde);
|
|
#ifndef MS_SQL
|
|
EXCEPTION
|
|
WHEN OTHERS
|
|
THEN FormatMask := REPLACE(FormatMask, '9', '#');
|
|
FormatMask := REPLACE(FormatMask, '0', '#');
|
|
FormatMask := REPLACE(FormatMask, 'D', '.');
|
|
RAISE_APPLICATION_ERROR(-20004,'ALG_M233,'|| KenmerkOmschr ||','
|
|
|| FormatMask);
|
|
#endif
|
|
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
|
|
#ifdef MS_SQL
|
|
DECLARE isdat smallint;
|
|
isdat := WEB.IsDateString(@KenmerkWaarde,'DD-MM-YYYY')
|
|
if isdat = -1 GOTO lcontinue
|
|
if isdat = 0 BEGIN
|
|
FormatMask := 'DD-MM-YYYY';
|
|
APPLICATION_ERROR_GOTO(-20004,'ALG_M233,'|| KenmerkOmschr ||','
|
|
|| FormatMask);
|
|
END;
|
|
#endif
|
|
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;
|
|
/*
|
|
** Ken nu een key aan dit record toe.
|
|
*/
|
|
#ifndef MS_SQL
|
|
IF :new.alg_onrgoedkenmerk_key IS NULL
|
|
THEN
|
|
SELECT alg_s_alg_onrgoedkenmerk_key.nextval
|
|
INTO :new.alg_onrgoedkenmerk_key
|
|
FROM DUAL;
|
|
END IF;
|
|
#else
|
|
lcontinue:
|
|
#endif
|
|
END IF;
|
|
END;
|
|
/
|
|
|
|
/* Vanaf Facilitor 3.0 worden de lege record verwijderd vanuit FORMS
|
|
i.v.m. performance.
|
|
|
|
CREATE_TRIGGER(alg_t_alg_onrgoedkenmerk_a_iu)
|
|
AFTER INSERT OR UPDATE ON alg_onrgoedkenmerk
|
|
BEGIN
|
|
/* Nadat de waardes ingevuld zijn worden de ALG_ONRGOEDKENMERK-records
|
|
** met NULL-waardes weer verwijderd. Ze zijn blijkbaar door de B_IU-trigger
|
|
** goedgekeurd, maar om de database niet overbodig te vullen worden ze weer verwijderd.
|
|
|
|
DELETE
|
|
FROM alg_onrgoedkenmerk
|
|
WHERE alg_onrgoedkenmerk_waarde IS NULL;
|
|
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_srtruimte_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_aanwezigsrtterreinsector, alg_srtterreinsector_key, 'alg_m041');
|
|
END;
|
|
/
|