First version (snapshot)
svn path=/Database/trunk/; revision=9215
This commit is contained in:
357
PRJ/PRJ_TRI.SRC
357
PRJ/PRJ_TRI.SRC
@@ -1,340 +1,73 @@
|
||||
#ifdef PRJ
|
||||
/* PRJ_TRI.SRC
|
||||
*
|
||||
* $Revision: 13 $
|
||||
* $Modtime: 6-04-06 17:13 $
|
||||
*/
|
||||
|
||||
#include "comsql.h"
|
||||
|
||||
/* Revisie:
|
||||
**
|
||||
** 28-09-1999 EGR prj_t_prj_ruimte_b_iu moet gebruik maken van alg_srtruimte_key bij controle van werkplekken.
|
||||
** 27-08-1999 EGR prj_t_prj_ruimte_b_iu werkend gemaakt voor gecascadeerd verwijderen van ruimte, werkplek, object.
|
||||
** 25-08-1999 RD Trigger <prj_t_prj_verwerk_log_B_IU> toegevoegd.
|
||||
** 23-07-1999 EGR LOG verwijderd en ins_deel. gewijzigd in prj_deel. .
|
||||
** 22-07-1999 EGR prj_t_prj_ruimte_B_IU, prj_t_prj_deel_b_iu, prj_t_prj_deel_s_b_iu,
|
||||
** prj_t_prj_deel_s_a_iu, prj_t_prj_werkplek_b_iu aangemaakt.
|
||||
** 20-04-1999 ABO Aangemaakt
|
||||
*/
|
||||
|
||||
CREATE_TRIGGER(prj_t_prj_project_b_iu)
|
||||
BEFORE INSERT OR UPDATE ON prj_project
|
||||
CREATE_TRIGGER(prj_t_prj_scenario_b_iu)
|
||||
BEFORE INSERT OR UPDATE ON prj_scenario
|
||||
FOR EACH ROW
|
||||
BEGIN
|
||||
UPDATE_PRIMARY_KEY(prj_project_key
|
||||
,prj_s_prj_project_key);
|
||||
UPDATE_PRIMARY_KEY(prj_scenario_key, prj_s_prj_scenario_key);
|
||||
END;
|
||||
/
|
||||
CREATE_TRIGGER(cad_t_cad_tekening_B_IU)
|
||||
BEFORE INSERT OR UPDATE ON cad_tekening
|
||||
|
||||
CREATE_TRIGGER(prj_t_prj_scenario_note_b_iu)
|
||||
BEFORE INSERT OR UPDATE ON prj_scenario_note
|
||||
FOR EACH ROW
|
||||
BEGIN
|
||||
-- Deze trigger is ook gedefinieerd in CAD !!
|
||||
UPDATE_PRIMARY_KEY(cad_tekening_key
|
||||
,cad_s_cad_tekening_key);
|
||||
UPDATE_AANMAAKDATUM(cad_tekening
|
||||
,cad_tekening_aanmaak);
|
||||
IF :new.cad_tekening_type IN ('P', 'C') AND
|
||||
:new.ins_discipline_key IS NOT NULL
|
||||
THEN
|
||||
RAISE_APPLICATION_ERROR(-20000, 'CAD_M010');
|
||||
END IF;
|
||||
IF :new.prj_project_key IS NOT NULL
|
||||
THEN
|
||||
:new.cad_tekening_filenaam := :new.cad_tekening_key ||'.DWG';
|
||||
END IF;
|
||||
UPDATE_PRIMARY_KEY(prj_scenario_note_key, prj_s_prj_scenario_note_key);
|
||||
END;
|
||||
/
|
||||
CREATE_TRIGGER(prj_t_prj_ruimte_B_IU)
|
||||
|
||||
CREATE_TRIGGER(prj_t_prj_ruimte_b_iu)
|
||||
BEFORE INSERT OR UPDATE ON prj_ruimte
|
||||
FOR EACH ROW
|
||||
BEGIN
|
||||
UPDATE_PRIMARY_KEY(alg_ruimte_key
|
||||
,alg_s_alg_onroerendgoed_keys);
|
||||
CHECK_CADMUTATIE(alg_ruimte_verwijder
|
||||
,alg_ruimte_getekend
|
||||
,'alg_m245');
|
||||
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 prj_werkplek PRS_W
|
||||
, alg_srtruimte SR_1
|
||||
, alg_srtruimte SR_2
|
||||
WHERE SR_1.alg_srtruimte_key = :old.alg_srtruimte_key
|
||||
AND SR_2.alg_srtruimte_key = :new.alg_srtruimte_key
|
||||
AND SR_1.prs_bevat_werkplek = 1
|
||||
AND SR_2.prs_bevat_werkplek IS NULL
|
||||
AND prs_werkplek_verwijder IS NULL
|
||||
AND prs_alg_ruimte_key = :new.alg_ruimte_key
|
||||
AND prj_project_key = :new.prj_project_key;
|
||||
APPLICATION_ERROR(-20000, 'prs_m034');
|
||||
EXCEPTION
|
||||
WHEN NO_DATA_FOUND
|
||||
THEN NULL;
|
||||
WHEN TOO_MANY_ROWS
|
||||
THEN APPLICATION_ERROR(-20000, 'prs_m034');
|
||||
END;
|
||||
END IF;
|
||||
/*
|
||||
** Als de ruimte verwijderd wordt, dan moeten ook de bijbehorende
|
||||
** werkplekken verwijderd worden.
|
||||
*/
|
||||
BEGIN
|
||||
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 prj_werkplek
|
||||
SET prs_werkplek_verwijder = :new.alg_ruimte_verwijder
|
||||
, prs_werkplek_getekend = :new.alg_ruimte_getekend
|
||||
WHERE prj_werkplek.prs_alg_ruimte_key = :new.alg_ruimte_key
|
||||
AND prj_werkplek.prj_project_key = :new.prj_project_key;
|
||||
END IF;
|
||||
END;
|
||||
/*
|
||||
** Als de ruimte verwijderd wordt, dan moeten ook de bijbehorende
|
||||
** objecten verwijderd wordne.
|
||||
*/
|
||||
BEGIN
|
||||
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 prj_deel
|
||||
SET ins_deel_verwijder = :new.alg_ruimte_verwijder
|
||||
, ins_deel_getekend = :new.alg_ruimte_getekend
|
||||
WHERE prj_deel.ins_alg_ruimte_key = :new.alg_ruimte_key
|
||||
AND prj_deel.prj_project_key = :new.prj_project_key
|
||||
AND ins_alg_ruimte_type <> 'W';
|
||||
END IF;
|
||||
END;
|
||||
UPDATE_PRIMARY_KEY(prj_ruimte_key, prj_s_prj_ruimte_key);
|
||||
:new.prj_ruimte_upper_nr := UPPER(:new.prj_ruimte_nr);
|
||||
END;
|
||||
/
|
||||
CREATE_TRIGGER(prj_t_prj_deel_S_B_IU)
|
||||
BEFORE INSERT OR UPDATE ON prj_deel
|
||||
DECLARE
|
||||
Dummy BOOLEAN;
|
||||
BEGIN
|
||||
Dummy := fac_p_fac_save_restore.ResetSelectie('PRJ_DEEL');
|
||||
Dummy := fac_p_fac_save_restore.ResetSelectie('PRJ_DEEL_VERWIJDER');
|
||||
Dummy := fac_p_fac_save_restore.ResetSelectie('PRJ_DEEL_CASCADE');
|
||||
Dummy := fac_p_fac_save_restore.ResetSelectie('PRJ_DEEL_PROJECT');
|
||||
END;
|
||||
/
|
||||
CREATE_TRIGGER(prj_t_prj_deel_B_IU)
|
||||
BEFORE INSERT OR UPDATE ON prj_deel
|
||||
FOR EACH ROW
|
||||
BEGIN
|
||||
UPDATE_PRIMARY_KEY(ins_deel_key
|
||||
,ins_s_ins_inst_keys);
|
||||
CHECK_CADMUTATIE2(ins_deel_verwijder
|
||||
,ins_deel_getekend
|
||||
,ins_alg_ruimte_key
|
||||
,'ins_m187');
|
||||
/*
|
||||
** Het zetten van de verwijderingsdatum gebeurt via FAC_P_FAC_SAVE_RESTORE-package. De key
|
||||
** voor het verwijderen wordt vastgelegd als tabelnaam PRJ_DEEL_VERWIJDER.
|
||||
** Verwijderen van INS_DEELKOPPELING-records gebeurt via FAC_P_FAC_SAVE_RESTORE-package.
|
||||
** Hier hoeft alleen de PRJ_DEEL_KEY onthouden te worden.
|
||||
** anders krijg je ORA-4094: Mutating-trigger-bla.
|
||||
*/
|
||||
IF :new.ins_deel_verwijder IS NOT NULL
|
||||
THEN
|
||||
DECLARE
|
||||
Dummy BOOLEAN;
|
||||
BEGIN
|
||||
Dummy := fac_p_fac_save_restore.SavePrimaryKey('PRJ_DEEL' , :new.ins_deel_key);
|
||||
Dummy := fac_p_fac_save_restore.SavePrimaryKey('PRJ_DEEL_VERWIJDER', :new.ins_deel_key);
|
||||
Dummy := fac_p_fac_save_restore.SavePrimaryKey('PRJ_DEEL_PROJECT' , :new.prj_project_key);
|
||||
END;
|
||||
END IF;
|
||||
/*
|
||||
** Vul het veld INS_DISCIPLINE van het huidige deel.
|
||||
*/
|
||||
IF :old.ins_srtdeel_key IS NULL
|
||||
OR :old.ins_srtdeel_key <> :new.ins_srtdeel_key
|
||||
OR :old.ins_discipline_key IS NULL
|
||||
THEN
|
||||
BEGIN
|
||||
SELECT INS_D.ins_discipline_key
|
||||
INTO :new.ins_discipline_key
|
||||
FROM ins_srtdeel INS_SD
|
||||
, ins_srtgroep INS_SG
|
||||
, ins_tab_discipline INS_D
|
||||
WHERE INS_SD.ins_srtdeel_key = :new.ins_srtdeel_key
|
||||
AND INS_SD.ins_srtgroep_key = INS_SG.ins_srtgroep_key
|
||||
AND INS_SG.ins_discipline_key = INS_D.ins_discipline_key;
|
||||
EXCEPTION
|
||||
WHEN NO_DATA_FOUND
|
||||
THEN :new.ins_discipline_key := NULL;
|
||||
END;
|
||||
END IF;
|
||||
/*
|
||||
** Vul het veld INS_ALG_LOCATIE_KEY van het huidige deel
|
||||
*/
|
||||
IF :old.ins_alg_ruimte_key IS NULL
|
||||
OR :old.ins_alg_ruimte_key <> :new.ins_alg_ruimte_key
|
||||
OR :new.ins_alg_locatie_key IS NULL
|
||||
THEN
|
||||
BEGIN
|
||||
SELECT prj_project_locatie_key
|
||||
INTO :new.ins_alg_locatie_key
|
||||
FROM prj_project
|
||||
WHERE prj_project_key = :new.prj_project_key;
|
||||
EXCEPTION
|
||||
WHEN NO_DATA_FOUND
|
||||
THEN :new.ins_alg_locatie_key := NULL;
|
||||
END;
|
||||
END IF;
|
||||
/*
|
||||
** Bij INS_DEEL moet INS_ALG_RUIMTE_KEY ingevuld zijn
|
||||
** en wel met ruimte, werkplek of terreinsector.
|
||||
** Daarvoor moet ook het INS_ALG_RUIMTE_TYPE veld goed ingevuld zijn
|
||||
** (met 'R' of 'W' of 'T').
|
||||
** Dit geldt als INS_ALG_RUIMTE_KEY veranderd is of als er een
|
||||
** nieuw record geinsert wordt.
|
||||
*/
|
||||
IF (:old.ins_alg_ruimte_key <> :new.ins_alg_ruimte_key
|
||||
OR :old.ins_alg_ruimte_key IS NULL)
|
||||
THEN
|
||||
IF :new.ins_alg_ruimte_type = 'W'
|
||||
THEN
|
||||
DECLARE
|
||||
dummy NUMBER(10);
|
||||
BEGIN
|
||||
SELECT prs_werkplek_key
|
||||
INTO dummy
|
||||
FROM prj_v_aanwezigwerkplek
|
||||
WHERE prs_werkplek_key = :new.ins_alg_ruimte_key
|
||||
AND prj_project_key = :new.prj_project_key;
|
||||
EXCEPTION
|
||||
WHEN NO_DATA_FOUND
|
||||
THEN APPLICATION_ERROR(-20000,'ins_m174');
|
||||
END;
|
||||
ELSIF :new.ins_alg_ruimte_type = 'R'
|
||||
THEN
|
||||
DECLARE
|
||||
dummy NUMBER(10);
|
||||
BEGIN
|
||||
SELECT alg_ruimte_key
|
||||
INTO dummy
|
||||
FROM prj_v_aanwezigruimte
|
||||
WHERE alg_ruimte_key = :new.ins_alg_ruimte_key
|
||||
AND prj_project_key = :new.prj_project_key;
|
||||
EXCEPTION
|
||||
WHEN NO_DATA_FOUND
|
||||
THEN APPLICATION_ERROR(-20000,'ins_m092');
|
||||
END;
|
||||
ELSIF :new.ins_alg_ruimte_type = 'T'
|
||||
THEN
|
||||
null;
|
||||
/* terreinsector wordt nog niet gebuikt in project.
|
||||
DECLARE
|
||||
dummy NUMBER(10);
|
||||
BEGIN
|
||||
SELECT alg_terreinsector_key
|
||||
INTO dummy
|
||||
FROM prj_v_aanwezigterreinsector
|
||||
WHERE alg_terreinsector_key = :new.ins_alg_ruimte_key
|
||||
AND prj_project_key = :new.prj_project_key;
|
||||
EXCEPTION
|
||||
WHEN NO_DATA_FOUND
|
||||
THEN APPLICATION_ERROR(-20000,'ins_m095');
|
||||
END;
|
||||
*/
|
||||
ELSE
|
||||
APPLICATION_ERROR(-20000, 'ins_m84');
|
||||
END IF;
|
||||
|
||||
DECLARE
|
||||
Dummy BOOLEAN;
|
||||
BEGIN
|
||||
Dummy := fac_p_fac_save_restore.SavePrimaryKey('PRJ_DEEL_CASCADE', :new.ins_deel_key);
|
||||
END;
|
||||
END IF;
|
||||
END;
|
||||
/
|
||||
CREATE_TRIGGER(prj_t_prj_deel_S_A_IU)
|
||||
AFTER INSERT OR UPDATE ON prj_deel
|
||||
BEGIN
|
||||
DECLARE
|
||||
IndexNr NUMBER;
|
||||
PrimaryKey NUMBER(10);
|
||||
ProjectKey NUMBER(10);
|
||||
Dummy BOOLEAN;
|
||||
BEGIN
|
||||
/* Zet de verwijderdatum voor PRJ_DEEL. */
|
||||
IndexNr := 1;
|
||||
PrimaryKey := fac_p_fac_save_restore.GetPrimaryKey('PRJ_DEEL', IndexNr);
|
||||
ProjectKey := fac_p_fac_save_restore.GetPrimaryKey('PRJ_DEEL_PROJECT',1);
|
||||
WHILE PrimaryKey IS NOT NULL
|
||||
LOOP
|
||||
UPDATE prj_deel
|
||||
SET ins_deel_verwijder = SYSDATE
|
||||
WHERE prj_deel.ins_deel_parent_key = PrimaryKey
|
||||
AND prj_project_key = ProjectKey
|
||||
AND ins_deel_verwijder IS NULL;
|
||||
IndexNr := IndexNr + 1;
|
||||
PrimaryKey := fac_p_fac_save_restore.GetPrimaryKey('PRJ_DEEL_VERWIJDER', IndexNr);
|
||||
END LOOP;
|
||||
Dummy := fac_p_fac_save_restore.ResetSelectie('PRJ_DEEL_VERWIJDER');
|
||||
/*
|
||||
** (onder)deel is verplaatst; dus ook de children naar die plaats.
|
||||
*/
|
||||
IndexNr := 1;
|
||||
PrimaryKey := fac_p_fac_save_restore.GetPrimaryKey('PRJ_DEEL_CASCADE', IndexNr);
|
||||
WHILE PrimaryKey IS NOT NULL
|
||||
LOOP
|
||||
UPDATE prj_deel
|
||||
SET (ins_alg_ruimte_key
|
||||
, ins_alg_ruimte_type
|
||||
, ins_alg_locatie_key) = (SELECT ins_alg_ruimte_key
|
||||
, ins_alg_ruimte_type
|
||||
, ins_alg_locatie_key
|
||||
FROM prj_deel
|
||||
WHERE ins_deel_key = PrimaryKey
|
||||
AND prj_project_key = ProjectKey)
|
||||
WHERE prj_deel.ins_deel_parent_key = PrimaryKey
|
||||
AND prj_project_key = ProjectKey;
|
||||
IndexNr := IndexNr + 1;
|
||||
PrimaryKey := fac_p_fac_save_restore.GetPrimaryKey('PRJ_DEEL_CASCADE', IndexNr);
|
||||
END LOOP;
|
||||
Dummy := fac_p_fac_save_restore.ResetSelectie('PRJ_DEEL_CASCADE');
|
||||
Dummy := fac_p_fac_save_restore.ResetSelectie('PRJ_DEEL_PROJECT');
|
||||
END;
|
||||
END;
|
||||
/
|
||||
CREATE_TRIGGER(prj_t_prj_werkplek_B_IU)
|
||||
CREATE_TRIGGER(prj_t_prj_werkplek_b_iu)
|
||||
BEFORE INSERT OR UPDATE ON prj_werkplek
|
||||
FOR EACH ROW
|
||||
BEGIN
|
||||
UPDATE_PRIMARY_KEY(prs_werkplek_key
|
||||
,prs_s_prs_werkplek_key);
|
||||
CHECK_CADMUTATIE2(prs_werkplek_verwijder
|
||||
,prs_werkplek_getekend
|
||||
,prs_alg_ruimte_key
|
||||
,'prs_m161');
|
||||
BEGIN
|
||||
IF :new.prs_werkplek_verwijder IS NOT NULL
|
||||
OR (:new.prs_werkplek_verwijder IS NULL AND :old.prs_werkplek_verwijder IS NOT NULL)
|
||||
THEN
|
||||
UPDATE prj_deel
|
||||
SET ins_deel_verwijder = :new.prs_werkplek_verwijder
|
||||
, ins_deel_getekend = :new.prs_werkplek_getekend
|
||||
WHERE prj_deel.ins_alg_ruimte_key = :new.prs_werkplek_key
|
||||
AND prj_deel.prj_project_key = :new.prj_project_key
|
||||
AND ins_alg_ruimte_type = 'W';
|
||||
END IF;
|
||||
END;
|
||||
UPDATE_PRIMARY_KEY(prj_werkplek_key, prj_s_prj_werkplek_key);
|
||||
END;
|
||||
/
|
||||
CREATE_TRIGGER(prj_t_prj_verwerk_log_B_IU)
|
||||
BEFORE INSERT OR UPDATE ON prj_verwerk_log
|
||||
|
||||
CREATE_TRIGGER(prj_t_prj_perslidwerkplek_b_iu)
|
||||
BEFORE INSERT OR UPDATE ON prj_perslidwerkplek
|
||||
FOR EACH ROW
|
||||
BEGIN
|
||||
IF :new.prj_verwerk_log_key IS NULL THEN SELECT prj_s_prj_verwerk_log_key.nextval INTO :new.prj_verwerk_log_key FROM DUAL; END IF;
|
||||
UPDATE_PRIMARY_KEY(prj_perslidwerkplek_key, prj_s_prj_perslidwerkplek_key);
|
||||
END;
|
||||
/
|
||||
|
||||
CREATE_TRIGGER(prj_t_prj_deel_b_iu)
|
||||
BEFORE INSERT OR UPDATE ON prj_deel
|
||||
FOR EACH ROW
|
||||
BEGIN
|
||||
UPDATE_PRIMARY_KEY(prj_deel_key, prj_s_prj_deel_key);
|
||||
END;
|
||||
/
|
||||
|
||||
CREATE_TRIGGER(prj_t_prj_log_b_iu)
|
||||
BEFORE INSERT OR UPDATE ON prj_log
|
||||
FOR EACH ROW
|
||||
BEGIN
|
||||
UPDATE_PRIMARY_KEY(prj_log_key, prj_s_prj_log_key);
|
||||
END;
|
||||
/
|
||||
|
||||
CREATE_TRIGGER(prj_t_prj_selectie_b_iu)
|
||||
BEFORE INSERT OR UPDATE ON prj_selectie
|
||||
FOR EACH ROW
|
||||
BEGIN
|
||||
UPDATE_PRIMARY_KEY(prj_selectie_key, prj_s_prj_selectie_key);
|
||||
END;
|
||||
/
|
||||
|
||||
#endif // PRJ
|
||||
|
||||
Reference in New Issue
Block a user