Files
Database/PRS/PRS_TRI.SRC
Maykel Geerdink 5f046971a1 UWVA#15272
svn path=/Database/trunk/; revision=9959
2009-01-20 06:10:24 +00:00

812 lines
27 KiB
Plaintext

/* CREA_TRI.SRC maakt de triggers aan voor PRS */
/* $Revision: 73 $
* $Modtime: 20-01-09 8:13 $
*/
#include "comsql.h"
#include "alg\algsql.h"
CREATE_TRIGGER(prs_t_prs_srtperslid_B_IU)
BEFORE INSERT OR UPDATE ON prs_srtperslid
FOR EACH ROW
BEGIN
UPDATE_PRIMARY_KEY(prs_srtperslid_key, prs_s_prs_alluitvoerende_keys);
UPDATE_UPPER(prs_srtperslid_omschrijving, prs_srtperslid_upper,prs_srtperslid);
CHECK_NOG_REFERENCES(prs_perslid, prs_srtperslid_verwijder,
prs_v_aanwezigperslid, prs_srtperslid_key, 'prs_m014');
UPDATE_AANMAAKDATUM(prs_srtperslid, prs_srtperslid_aanmaak);
//<MLD>
// Niet verwijderen als nog MLD_OPDR's zijn met status 'Uitgegeven' en
// uitvoerende deze SRTPERSLID.
IF :new.prs_srtperslid_verwijder IS NOT NULLDATUM
THEN
DECLARE
dummy CHAR;
BEGIN
SELECT 'X'
INTO dummy
FROM mld_opdr MLD_O, mld_statusopdr MLD_S
WHERE MLD_O.mld_statusopdr_key = MLD_S.mld_statusopdr_key
AND MLD_S.mld_statusopdr_upper = 'MLD_UITGEGEVEN'
AND MLD_O.mld_uitvoerende_keys = :new.prs_srtperslid_key;
APPLICATION_ERROR(-20000, 'prs_m084');
EXCEPTION
WHEN NO_DATA_FOUND
THEN NULL;
WHEN TOO_MANY_ROWS
THEN APPLICATION_ERROR(-20000, 'prs_m084');
END;
END IF;
//</MLD>
END;
/
CREATE_TRIGGER(prs_t_prs_afdeling_B_IU)
BEFORE INSERT OR UPDATE ON prs_afdeling
FOR EACH ROW
BEGIN
UPDATE_PRIMARY_KEY(prs_afdeling_key, prs_s_prs_afdeling_key);
UPDATE_UPPER(prs_afdeling_naam, prs_afdeling_upper,prs_afdeling);
CHECK_NOG_REFERENCES(prs_perslid, prs_afdeling_verwijder,
prs_v_aanwezigperslid, prs_afdeling_key, 'prs_m015');
UPDATE_AANMAAKDATUM(prs_afdeling, prs_afdeling_aanmaak);
/* 6/20/97/AH #1312, De CASCADE-verwijderen van
* PRS_PERSLIDWERKPLEK verplaatst naar PRS011/Verwijderen. In de trigger een
* RESTRICTED toegevoegd om evt. fouten te kunnen voorkomen.
*/
CHECK_NOG_REFERENCES(prs_perslid, prs_afdeling_verwijder,
prs_v_aanwezigruimteafdeling, prs_afdeling_key, 'SYSTEM ERROR: In Afdeling, er zijn nog PRS_RUIMTEAFDELING-records');
IF :new.prs_afdeling_verwijder IS NOT NULL AND :old.prs_afdeling_verwijder IS NULL THEN
DECLARE
dummy CHAR;
BEGIN
SELECT 'x'
INTO dummy
FROM cnt_v_aanwezigcontract
WHERE cnt_v_aanwezigcontract.cnt_prs_afdeling_key = :old.prs_afdeling_key
AND cnt_v_aanwezigcontract.cnt_contract_looptijd_tot > sysdate;
APPLICATION_ERROR_GOTO(-20000,'cnt_m022');
EXCEPTION
WHEN NO_DATA_FOUND THEN NULL;
WHEN TOO_MANY_ROWS THEN APPLICATION_ERROR_GOTO(-20000,'cnt_m022');
END;
END IF;
--
-- Afdeling mag alleen verwijderd worden als deze geen objecten meer in het bezit heeft.
--
IF :new.prs_afdeling_verwijder IS NOT NULL AND :old.prs_afdeling_verwijder IS NULL
THEN
DECLARE
dummy VARCHAR2(1);
BEGIN
SELECT 'x'
INTO dummy
FROM ins_deel
WHERE ins_deel_verwijder IS NULL
AND ins_alg_ruimte_type = 'A'
AND ins_alg_ruimte_key = :old.prs_afdeling_key;
APPLICATION_ERROR_GOTO(-20000,'prs_m173');
EXCEPTION
WHEN NO_DATA_FOUND THEN NULL;
WHEN TOO_MANY_ROWS THEN APPLICATION_ERROR_GOTO(-20000,'prs_m173');
END;
END IF;
#ifdef MS_SQL
lerror:
#endif
END;
/
CREATE_TRIGGER(prs_t_prs_afdeling_B_D)
BEFORE DELETE ON PRS_AFDELING
FOR EACH ROW
BEGIN
DELETE FROM PRS_KENMERKLINK KL WHERE KL.PRS_LINK_KEY=:new.prs_afdeling_key AND KL.PRS_KENMERKLINK_NIVEAU='A';
END;
/
CREATE_TRIGGER(prs_t_prs_perslid_B_IU)
BEFORE INSERT OR UPDATE ON prs_perslid
FOR EACH ROW
BEGIN
UPDATE_PRIMARY_KEY(prs_perslid_key, prs_s_prs_alluitvoerende_keys);
UPDATE_UPPER(prs_perslid_naam, prs_perslid_upper,prs_perslid);
UPDATE_UPPER(prs_perslid_initialen, prs_perslid_init_upper,prs_perslid);
UPDATE_UPPER(prs_perslid_oslogin, prs_perslid_oslogin,prs_perslid);
UPDATE_UPPER(prs_perslid_oslogin2, prs_perslid_oslogin2,prs_perslid);
UPDATE_AANMAAKDATUM(prs_perslid, prs_perslid_aanmaak);
IF :new.prs_perslid_verwijder IS NOT NULLDATUM AND :old.prs_perslid_verwijder IS NULLDATUM
THEN
DECLARE
dummy VARCHAR2(1);
BEGIN
-- Niet verwijderen als nog MLD_OPDR's zijn met status 'Uitgegeven' en
-- uitvoerende deze PERSLID.
SELECT 'X'
INTO dummy
FROM mld_opdr MLD_O
, mld_statusopdr MLD_S
WHERE MLD_O.mld_statusopdr_key = MLD_S.mld_statusopdr_key
AND MLD_S.mld_statusopdr_upper = 'MLD_UITGEGEVEN'
AND MLD_O.mld_uitvoerende_keys = :new.prs_perslid_key;
APPLICATION_ERROR_GOTO(-20000, 'prs_m085');
EXCEPTION
WHEN NO_DATA_FOUND THEN NULL;
WHEN TOO_MANY_ROWS THEN APPLICATION_ERROR_GOTO(-20000, 'prs_m085');
END;
DECLARE
dummy VARCHAR2(1);
BEGIN
-- Persoon mag alleen verwijderd worden als deze geen objecten meer in het bezit heeft.
-- Dit geldt alleen voor objecten die 'van de organisatie' zijn, d.i.
-- ins_discipline_min_level <> 3. Deze mocht de gebruiker zelf bijhouden
SELECT 'x'
INTO dummy
FROM ins_v_aanwezigdeel D, ins_tab_discipline DI
WHERE ins_alg_ruimte_type = 'P'
AND ins_alg_ruimte_key = :old.prs_perslid_key
AND DI.ins_discipline_key = D.ins_discipline_key
AND DI.ins_discipline_min_level <> 3;
APPLICATION_ERROR_GOTO(-20000,'prs_m175');
EXCEPTION
WHEN NO_DATA_FOUND THEN NULL;
WHEN TOO_MANY_ROWS THEN APPLICATION_ERROR_GOTO(-20000,'prs_m175');
END;
-- Hierna kan het verwijderen niet meer falen
BEGIN
DELETE FROM prs_perslidwerkplek
WHERE prs_perslid_key = :old.prs_perslid_key;
END;
-- Verwijder mandateringen
BEGIN
DELETE FROM prs_perslidkostenplaats
WHERE prs_perslid_key = :old.prs_perslid_key;
END;
BEGIN
-- Tenslotte: ruim de objecten op, d.i. de objecten die ik zelf mocht beheren, en
-- de objecten die reeds vervallen waren. Ruim ook autorisaties op.
DELETE FROM FAC_GEBRUIKERSGROEP WHERE PRS_PERSLID_KEY = :old.prs_perslid_key;
DELETE FROM INS_DEEL WHERE ins_deel_key IN
(SELECT D.ins_deel_key
FROM ins_deel D, ins_tab_discipline DI
WHERE ins_alg_ruimte_type = 'P'
AND ins_alg_ruimte_key = :old.prs_perslid_key
AND DI.ins_discipline_key = D.ins_discipline_key
AND (DI.ins_discipline_min_level = 3 OR ins_deel_verwijder IS NOT NULL));
END;
-- FSN#672 Unieke prs_perslid_oslogin behouden
:new.prs_perslid_oslogin := '';
:new.prs_perslid_oslogin2 := '';
END IF;
END;
/
CREATE_TRIGGER(prs_t_prs_perslid_A_IU)
AFTER INSERT OR UPDATE ON prs_perslid
FOR EACH ROW
BEGIN
/*
* Als persoon een login krijgt, dan ook in de default autorisatiegroep als die nog geen rechten had
*/
IF :new.prs_perslid_verwijder IS NULLDATUM AND
:new.prs_perslid_oslogin IS NOT NULL AND :old.prs_perslid_oslogin IS NULL
THEN
BEGIN
INSERT INTO fac_gebruikersgroep
(fac_groep_key, prs_perslid_key)
SELECT fac_groep_key, :NEW.prs_perslid_key
FROM fac_groep
WHERE fac_groep_upper = '_DEFAULT'
AND fac_groep_verwijder IS NULL
AND NOT EXISTS (SELECT 'x'
FROM fac_gebruikersgroep
WHERE prs_perslid_key = :NEW.prs_perslid_key);
EXCEPTION
WHEN OTHERS
THEN
NULL;
END;
END IF;
END;
/
CREATE_TRIGGER(prs_t_prs_perslid_B_D)
BEFORE DELETE ON PRS_PERSLID
FOR EACH ROW
BEGIN
DELETE FROM PRS_KENMERKLINK KL WHERE KL.PRS_LINK_KEY=:new.prs_perslid_key AND KL.PRS_KENMERKLINK_NIVEAU='P';
END;
/
CREATE_TRIGGER(prs_t_prs_werkplek_B_IU)
BEFORE INSERT OR UPDATE ON prs_werkplek
FOR EACH ROW
BEGIN
UPDATE_PRIMARY_KEY(prs_werkplek_key, prs_s_prs_werkplek_key);
/* werkplek weg = bezetting weg */
SET_VERWIJDER_CHILDREN(prs_perslidwerkplek, prs_werkplek_key, prs_werkplek_verwijder, prs_perslidwerkplek_verwijder,prs_werkplek);
UPDATE_AANMAAKDATUM(prs_werkplek, prs_werkplek_aanmaak);
IF :NEW.prs_werkplek_verwijder IS NOT NULL AND :OLD.prs_werkplek_verwijder IS NULL
THEN
UPDATE ins_deel
SET ins_alg_ruimte_type = 'R',
ins_alg_ruimte_key = :new.prs_alg_ruimte_key
WHERE ins_deel.ins_alg_ruimte_key = :NEW.prs_werkplek_key
AND ins_deel.ins_alg_ruimte_type = 'W'
AND ins_deel.ins_deel_verwijder IS NULL;
END IF;
END;
/
CREATE_TRIGGER(prs_t_prs_ruimteafdeling_B_IU)
BEFORE INSERT OR UPDATE ON prs_ruimteafdeling
FOR EACH ROW
BEGIN
UPDATE_PRIMARY_KEY(prs_ruimteafdeling_key, prs_s_prs_ruimteafdeling_key);
END;
/
CREATE_TRIGGER(prs_t_prs_perslidwerkplek_B_IU)
BEFORE INSERT OR UPDATE ON prs_perslidwerkplek
FOR EACH ROW
BEGIN
UPDATE_PRIMARY_KEY(prs_perslidwerkplek_key, prs_s_prs_perslidwerkplek_key);
UPDATE_AANMAAKDATUM(prs_perslidwerkplek, prs_perslidwerkplek_aanmaak);
/*
* 10-7-97 AH #1365, PRS_PERSLIDWERKPLEK_VERWIJDER-velden weggehaald.
*
* 5/26/97 AH #1255, VERWIJDER-veld mag niet meer gebruikt worden ivm. MUTATING TABLE
* bij CASCADE van PRS_PERSLID, enz. Dus hier een controle toegevoegd
*/
END;
/
CREATE_TRIGGER(prs_t_prs_bedrijf_B_IU)
BEFORE INSERT OR UPDATE ON prs_bedrijf
FOR EACH ROW
BEGIN
UPDATE_PRIMARY_KEY(prs_bedrijf_key,prs_s_prs_alluitvoerende_keys);
UPDATE_UPPER(prs_bedrijf_naam,prs_bedrijf_naam_upper,prs_bedrijf);
SET_VERWIJDER_CHILDREN(prs_srtperslid, prs_bedrijf_key,
prs_bedrijf_verwijder, prs_srtperslid_verwijder,prs_bedrijf);
UPDATE_AANMAAKDATUM(prs_bedrijf, prs_bedrijf_aanmaak);
// Niet verwijderen als nog MLD_OPDR's zijn met status 'Uitgegeven' en
// uitvoerende dit bedrijf
IF :new.prs_bedrijf_verwijder IS NOT NULLDATUM AND :old.prs_bedrijf_verwijder IS NULLDATUM
THEN
DECLARE
dummy CHAR;
BEGIN
SELECT 'X'
INTO dummy
FROM mld_opdr MLD_O, mld_statusopdr MLD_S
WHERE MLD_O.mld_statusopdr_key = MLD_S.mld_statusopdr_key
AND MLD_S.mld_statusopdr_omschrijving = 'Uitgegeven'
AND MLD_O.mld_uitvoerende_keys = :new.prs_bedrijf_key;
APPLICATION_ERROR_GOTO(-20000, 'prs_m086');
EXCEPTION
WHEN NO_DATA_FOUND
THEN NULL;
WHEN TOO_MANY_ROWS
THEN APPLICATION_ERROR_GOTO(-20000, 'prs_m086');
END;
END IF;
IF :new.prs_bedrijf_verwijder IS NOT NULL AND :old.prs_bedrijf_verwijder IS NULL THEN
DECLARE
dummy CHAR;
BEGIN
SELECT 'x'
INTO dummy
FROM cnt_v_aanwezigcontract
WHERE cnt_v_aanwezigcontract.cnt_prs_bedrijf_key = :old.prs_bedrijf_key
AND cnt_v_aanwezigcontract.cnt_contract_looptijd_tot > sysdate;
APPLICATION_ERROR_GOTO(-20000,'cnt_m023');
EXCEPTION
WHEN NO_DATA_FOUND THEN NULL;
WHEN TOO_MANY_ROWS THEN APPLICATION_ERROR_GOTO(-20000,'cnt_m023');
END;
END IF;
#ifdef MS_SQL
lerror:
#endif
END;
/
CREATE_TRIGGER(prs_t_prs_refkenmerk_b_iu)
BEFORE INSERT OR UPDATE ON prs_refkenmerk
FOR EACH ROW
DECLARE
ObjectType USER_OBJECTS.OBJECT_TYPE%TYPE;
BEGIN
UPDATE_PRIMARY_KEY(prs_refkenmerk_key,prs_s_prs_refkenmerk_key);
UPDATE_UPPER(prs_refkenmerk_omschrijving,prs_refkenmerk_upper,prs_refkenmerk);
UPDATE_AANMAAKDATUM(prs_refkenmerk, prs_refkenmerk_aanmaak);
/* Controleer of de ingevulde tablenaam, kolomnaam en kolomtxt
** wel bestaan.
*/
/* Trigger moet ook afgaan als de omschrijving gewijzigd wordt ...
IF :new.prs_refkenmerk_objectnaam <> :old.prs_refkenmerk_objectnaam
OR :old.prs_refkenmerk_objectnaam IS NULL
THEN
*/
BEGIN
SELECT OBJECT_TYPE
INTO ObjectType
FROM USER_OBJECTS
WHERE OBJECT_NAME = :new.prs_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.prs_refkenmerk_objectnaam
AND COLUMN_NAME = :new.prs_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.prs_refkenmerk_objectnaam
AND COLUMN_NAME = :new.prs_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(prs_t_prs_kenmerk_b_iu)
BEFORE INSERT OR UPDATE ON prs_kenmerk
FOR EACH ROW
BEGIN
UPDATE_PRIMARY_KEY(prs_kenmerk_key, prs_s_prs_kenmerk_key);
UPDATE_UPPER(prs_kenmerk_omschrijving, prs_kenmerk_upper,prs_kenmerk);
IF (:new.prs_kenmerk_kenmerktype IN ('C','N'))
AND :new.prs_kenmerk_lengte IS NULL
THEN
APPLICATION_ERROR(-20000, 'ALG_C_ALG_KENMERK_LENGTE');
END IF;
IF :new.prs_kenmerk_kenmerktype = 'N' AND :old.prs_kenmerk_key IS NOT NULL
THEN
-- An existing property of type N
IF :old.prs_kenmerk_nmin <> :new.prs_kenmerk_nmin OR
(:old.prs_kenmerk_nmin IS NULL AND :new.prs_kenmerk_nmin IS NOT NULL)
THEN
DECLARE
Dummy CHAR;
BEGIN
SELECT 'X'
INTO Dummy
FROM prs_kenmerkLink
WHERE FAC.SAFE_TO_NUMBER(prs_kenmerkLink_waarde) < :new.prs_kenmerk_nmin
AND prs_kenmerk_key = :old.prs_kenmerk_key;
IF :new.prs_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.prs_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.prs_kenmerk_nmax <> :new.prs_kenmerk_nmax OR
(:old.prs_kenmerk_nmax IS NULL AND :new.prs_kenmerk_nmax IS NOT NULL)
THEN
DECLARE
Dummy CHAR;
BEGIN
SELECT 'X'
INTO Dummy
FROM prs_kenmerkLink
WHERE FAC.SAFE_TO_NUMBER(prs_kenmerkLink_waarde) > :new.prs_kenmerk_nmax
AND prs_kenmerk_key = :old.prs_kenmerk_key;
IF :new.prs_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.prs_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(prs_kenmerk, prs_kenmerk_aanmaak);
END;
/
CREATE_TRIGGER(prs_t_prs_kenmerk_b_d)
BEFORE DELETE ON prs_kenmerk
FOR EACH ROW
BEGIN
IF :old.prs_kenmerk_systeem = 1
THEN
APPLICATION_ERROR(-20003, 'ALG_M238');
ELSE
DELETE
FROM prs_kenmerkLink
WHERE prs_kenmerk_key = :old.prs_kenmerk_key;
END IF;
END;
/
CREATE_TRIGGER(prs_t_prs_kenmerkLink_b_iu)
BEFORE INSERT OR UPDATE ON prs_kenmerkLink
FOR EACH ROW
BEGIN
UPDATE_AANMAAKDATUM(prs_kenmerklink, prs_kenmerkLink_aanmaak);
/*
** Controleer eerst of de ingevulde waarde goed is.
*/
IF (:new.prs_kenmerkLink_waarde <> :old.prs_kenmerkLink_waarde
OR :old.prs_kenmerkLink_waarde IS NULL
OR :new.prs_kenmerkLink_waarde IS NULL)
AND :new.prs_link_key IS NOT NULL
THEN
DECLARE
KenmerkOmschr prs_kenmerk.prs_kenmerk_omschrijving%TYPE;
KenmerkType prs_kenmerk.prs_kenmerk_kenmerktype%TYPE;
KenmerkLengte prs_kenmerk.prs_kenmerk_lengte%TYPE;
KenmerkDec prs_kenmerk.prs_kenmerk_dec%TYPE;
KenmerkNMin prs_kenmerk.prs_kenmerk_nmin%TYPE;
KenmerkNMax prs_kenmerk.prs_kenmerk_nmax%TYPE;
RefKenmerkKey NUMBER(10);
NumberWaarde NUMBER(15,5);
FormatMask VARCHAR2(60);
KenmerkWaarde prs_kenmerklink.prs_kenmerklink_waarde%TYPE;
BEGIN
KenmerkWaarde := :new.prs_kenmerkLink_waarde;
BEGIN
DECLARE
dummy VARCHAR2(1);
BEGIN
IF :new.prs_kenmerkLink_niveau = 'P'
THEN
SELECT 'X'
INTO dummy
FROM prs_perslid
WHERE prs_perslid_key = :new.prs_link_key;
ELSIF :new.prs_kenmerkLink_niveau = 'A'
THEN
SELECT 'X'
INTO dummy
FROM prs_afdeling
WHERE prs_afdeling_key = :new.prs_link_key;
ELSIF :new.prs_kenmerkLink_niveau = 'B'
THEN
SELECT 'X'
INTO dummy
FROM prs_bedrijf
WHERE prs_bedrijf_key = :new.prs_link_key;
END IF;
EXCEPTION
WHEN NO_DATA_FOUND
THEN APPLICATION_ERROR_GOTO(-20000, 'ALG_M015');
END;
SELECT prs_kenmerk_omschrijving
, prs_kenmerk_kenmerktype
, prs_kenmerk_lengte
, prs_kenmerk_dec
, prs_kenmerk_nmin
, prs_kenmerk_nmax
, prs_refkenmerk_key
INTO KenmerkOmschr
, KenmerkType
, KenmerkLengte
, KenmerkDec
, KenmerkNMin
, KenmerkNMax
, RefKenmerkKey
FROM prs_kenmerk
WHERE prs_kenmerk_key = :new.prs_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_GOTO(-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.prs_kenmerkLink_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.prs_kenmerkLink_waarde := KenmerkWaarde;
END IF;
END;
#ifndef MS_SQL
/*MS SQL autoincrements primary key*/
/*
** Ken nu een key aan dit record toe.
*/
IF :new.prs_kenmerkLink_key IS NULL
THEN
SELECT prs_s_prs_kenmerkLink_key.nextval
INTO :new.prs_kenmerkLink_key
FROM DUAL;
END IF;
#else
lcontinue:
#endif
END IF;
END;
/
CREATE_TRIGGER(prs_t_prs_collega_B_IU)
BEFORE INSERT OR UPDATE ON prs_collega
FOR EACH ROW
BEGIN
UPDATE_PRIMARY_KEY(prs_collega_key,prs_s_prs_collega_key);
END;
/
CREATE_TRIGGER(prs_t_prs_perslideenheid_B_IU)
BEFORE INSERT OR UPDATE ON prs_perslideenheid
FOR EACH ROW
BEGIN
UPDATE_PRIMARY_KEY(prs_perslideenheid_key,prs_s_prs_perslideenheid_key);
END;
/
CREATE_TRIGGER(prs_t_prs_perslidafdeling_B_IU)
BEFORE INSERT OR UPDATE ON prs_perslidafdeling
FOR EACH ROW
BEGIN
UPDATE_PRIMARY_KEY(prs_perslidafdeling_key,prs_s_prs_perslidafdeling_key);
END;
/
CREATE_TRIGGER(prs_t_prs_contactpersoon_B_IU)
BEFORE INSERT OR UPDATE ON prs_contactpersoon
FOR EACH ROW
BEGIN
UPDATE_PRIMARY_KEY(prs_contactpersoon_key,prs_s_prs_contactpersoon_key);
END;
/
CREATE_TRIGGER(prs_t_prs_contactpers_loc_b_iu)
BEFORE INSERT OR UPDATE ON prs_contactpersoon_locatie
FOR EACH ROW
BEGIN
UPDATE_PRIMARY_KEY(prs_contactpersoon_locatie_key,prs_s_prs_contactpers_loc_key);
END;
/
CREATE_TRIGGER(prs_t_prs_dienst_B_IU)
BEFORE INSERT OR UPDATE ON prs_dienst
FOR EACH ROW
BEGIN
UPDATE_PRIMARY_KEY(prs_dienst_key,prs_s_prs_dienst_key);
END;
/
CREATE_TRIGGER(prs_t_prs_bedrijfdnstloc_B_IU)
BEFORE INSERT OR UPDATE ON prs_bedrijfdienstlocatie
FOR EACH ROW
BEGIN
UPDATE_PRIMARY_KEY(prs_bedrijfdienstlocatie_key,prs_s_prs_bedrijfdienstloc_key);
END;
/
CREATE_TRIGGER(prs_t_prs_kostenplaatsgrp_B_IU)
BEFORE INSERT OR UPDATE ON prs_kostenplaatsgrp
FOR EACH ROW
BEGIN
UPDATE_PRIMARY_KEY(prs_kostenplaatsgrp_key, prs_s_prs_kostenplaatsgrp_key);
END;
/
CREATE_TRIGGER(prs_t_prs_kostenplaats_B_IU)
BEFORE INSERT OR UPDATE ON prs_kostenplaats
FOR EACH ROW
BEGIN
UPDATE_PRIMARY_KEY(prs_kostenplaats_key, prs_s_prs_kostenplaats_key);
UPDATE_UPPER(prs_kostenplaats_nr, prs_kostenplaats_upper, prs_kostenplaats);
IF :new.prs_kostenplaats_verwijder IS NOT NULL and :old.prs_kostenplaats_verwijder IS NULL
THEN
DELETE FROM prs_perslidkostenplaats
WHERE prs_kostenplaats_key = :new.prs_kostenplaats_key;
END IF;
END;
/
CREATE_TRIGGER(prs_t_prs_perslidkp_B_IU)
BEFORE INSERT OR UPDATE ON prs_perslidkostenplaats
FOR EACH ROW
BEGIN
UPDATE_PRIMARY_KEY(prs_perslidkostenplaats_key, prs_s_prs_perslidkp_key);
END;
/
CREATE_TRIGGER(prs_t_prs_project_B_IU)
BEFORE INSERT OR UPDATE ON prs_project
FOR EACH ROW
BEGIN
UPDATE_PRIMARY_KEY(prs_project_key, prs_s_prs_project_key);
END;
/
CREATE_TRIGGER(prs_t_prs_kostensoortgrp_B_IU)
BEFORE INSERT OR UPDATE ON prs_kostensoortgrp
FOR EACH ROW
BEGIN
UPDATE_PRIMARY_KEY(prs_kostensoortgrp_key, prs_s_prs_kostensoortgrp_key);
END;
/
CREATE_TRIGGER(prs_t_prs_kostensoort_B_IU)
BEFORE INSERT OR UPDATE ON prs_kostensoort
FOR EACH ROW
BEGIN
UPDATE_PRIMARY_KEY(prs_kostensoort_key, prs_s_prs_kostensoort_key);
UPDATE_UPPER(prs_kostensoort_oms, prs_kostensoort_upper, prs_kostensoort);
END;
/
CREATE_TRIGGER(prs_t_prs_kostencomb_B_IU)
BEFORE INSERT OR UPDATE ON prs_kostencombinatie
FOR EACH ROW
BEGIN
UPDATE_PRIMARY_KEY(prs_kostencombinatie_key, prs_s_prs_kostencombinatie_key);
END;
/