Files
Database/PRS/PRS_TRI.SRC
Peter Feij b847efcd21 syntax
svn path=/Database/trunk/; revision=8364
2003-10-09 16:40:10 +00:00

761 lines
26 KiB
Plaintext

/* CREA_TRI.SRC maakt de triggers aan voor PRS */
/* $Revision: 32 $
* $Modtime: 9-10-03 18:38 $
*/
#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);
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);
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_aanwezigperslidwerkplek, prs_afdeling_key, 'SYSTEM ERROR: In Afdeling, er zijn nog PRS_PERSLIDWERKPLEK-records');
//<CNT>
IF :new.prs_afdeling_verwijder IS NOT 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;
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;
//</CNT>
--
-- Afdeling mag alleen verwijderd worden als deze geen objecten meer in het bezit heeft.
--
IF :new.prs_afdeling_verwijder IS NOT 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;
--
BEGIN
IF :new.prs_afdeling_verwijder IS NOT NULL
OR (:new.prs_afdeling_verwijder IS NULL AND :old.prs_afdeling_verwijder IS NOT NULL)
THEN
UPDATE res_artikel
SET res_artikel_verwijder = :new.prs_afdeling_verwijder
WHERE res_artikel.prs_afdeling_key = :new.prs_afdeling_key
AND res_artikel_verwijder IS NULL;
END IF;
END;
--
-- We blijven veld prs_afdeling_eenheid (voorlopig) redundant gebruiken,
-- anders veel te veel forms aan te passen
--
IF:new.prs_afdeling_verwijder IS NULL
THEN
IF :new.prs_eenheid_key IS NOT NULL
AND :old.prs_eenheid_key <> :new.prs_eenheid_key
THEN
DECLARE
Eenheid prs_afdeling.prs_afdeling_eenheid%TYPE;
BEGIN
SELECT prs_eenheid_code INTO Eenheid
FROM prs_eenheid
WHERE prs_eenheid_key = :new.prs_eenheid_key;
--
:new.prs_afdeling_eenheid := Eenheid;
EXCEPTION
WHEN NO_DATA_FOUND THEN NULL;
WHEN TOO_MANY_ROWS THEN NULL;
END;
ELSE
IF :new.prs_eenheid_key IS NULL THEN
:new.prs_afdeling_eenheid := NULL;
END IF;
END IF;
END IF;
#ifdef MS_SQL
lerror:
#endif
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);
UPDATE_UPPER(prs_perslid_initialen, prs_perslid_init_upper);
UPDATE_UPPER(prs_perslid_oslogin, prs_perslid_oslogin);
UPDATE_AANMAAKDATUM(prs_perslid, prs_perslid_aanmaak);
CHECK_NOG_REFERENCES(prs_perslid, prs_perslid_verwijder
,prs_v_aanwezigperslidwerkplek, prs_perslid_key, 'prs_m174');
//<MLD>
-- Niet verwijderen als nog MLD_OPDR's zijn met status 'Uitgegeven' en
-- uitvoerende deze PERSLID.
IF :new.prs_perslid_verwijder IS NOT NULLDATUM
THEN
DECLARE
dummy VARCHAR2(1);
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_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;
END IF;
//</MLD>
-- 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
IF :new.prs_perslid_verwijder IS NOT NULL THEN
DECLARE
dummy VARCHAR2(1);
BEGIN
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;
END IF;
-- 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.
BEGIN
IF :new.prs_perslid_verwijder IS NOT NULL
THEN
DELETE FROM FAC_GEBRUIKERSGROEP WHERE PRS_PERSLID_KEY = :old.prs_perslid_key;
DELETE FROM FAC_GEBRUIKER WHERE FAC_GEBRUIKER_USERNAME = :old.prs_perslid_oslogin _MSSQL( AND FAC_GEBRUIKER_USERNAME IS NOT NULL);
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 IF;
END;
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);
/* Een werkplek mag niet verwijderd worden als er nog personen
* aan gekoppeld zijn.
*/
CHECK_CADMUTATIE2(prs_werkplek_verwijder, prs_werkplek_getekend, prs_alg_ruimte_key, 'prs_m161');
SET_VERWIJDER_CHILDREN(prs_perslidwerkplek, prs_werkplek_key, prs_werkplek_verwijder, prs_perslidwerkplek_verwijder);
UPDATE_AANMAAKDATUM(prs_werkplek, prs_werkplek_aanmaak);
/* IF :new.prs_werkplek_module = 'PRR'
THEN
CHECK_NOG_REFERENCES(prs_werkplek, prs_werkplek_verwijder,
prs_perslidwerkplek, prs_werkplek_key, 'prs_m016');
END IF;
*/
//<INS>
/* Oude code vervangen door macro...
IF :new.prs_werkplek_verwijder <> :old.prs_werkplek_verwijder
THEN
UPDATE ins_deel
SET ins_deel_verwijder = :new.prs_werkplek_verwijder
WHERE ins_alg_ruimte_key = :old.prs_werkplek_key
AND ins_alg_ruimte_type = 'W';
END IF;
*/
SET_VERWIJDER_CHILDREN_DEELWP(ins_deel, prs_werkplek_key, prs_werkplek_verwijder, prs_werkplek_getekend,
ins_deel_verwijder, ins_alg_ruimte_key, ins_deel_getekend);
//</INS>
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);
SET_VERWIJDER_CHILDREN(prs_srtperslid, prs_bedrijf_key,
prs_bedrijf_verwijder, prs_srtperslid_verwijder);
UPDATE_AANMAAKDATUM(prs_bedrijf, prs_bedrijf_aanmaak);
//<MLD>
// Niet verwijderen als nog MLD_OPDR's zijn met status 'Uitgegeven' en
// uitvoerende dit bedrijf
IF :new.prs_bedrijf_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_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 :old.prs_bedrijf_leverancier IS NOT NULL
AND :new.prs_bedrijf_leverancier IS NULL
THEN
DECLARE
dummy CHAR;
BEGIN
SELECT 'X'
INTO dummy
FROM mld_bestelopdr
WHERE mld_prs_bedrijf_key = :new.prs_bedrijf_key;
APPLICATION_ERROR_GOTO(-20000, 'PRS_M101');
EXCEPTION
WHEN NO_DATA_FOUND
THEN NULL;
WHEN TOO_MANY_ROWS
THEN APPLICATION_ERROR_GOTO(-20000, 'PRS_M101');
END;
END IF;
//</MLD>
BEGIN
IF :new.prs_bedrijf_verwijder IS NOT NULL
OR (:new.prs_bedrijf_verwijder IS NULL AND :old.prs_bedrijf_verwijder IS NOT NULL)
THEN
UPDATE res_artikel
SET res_artikel_verwijder = :new.prs_bedrijf_verwijder
WHERE res_artikel.prs_bedrijf_key = :new.prs_bedrijf_key
AND res_artikel_verwijder IS NULL;
END IF;
END;
//<CNT>
IF :new.prs_bedrijf_verwijder IS NOT 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;
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;
//<CNT>
#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);
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);
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
IF :old.prs_kenmerk_nmin <> :new.prs_kenmerk_nmin OR
:old.prs_kenmerk_nmin IS NULL
THEN
DECLARE
Dummy CHAR;
BEGIN
SELECT 'X'
INTO Dummy
FROM prs_kenmerkLink
WHERE 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
THEN
DECLARE
Dummy CHAR;
BEGIN
SELECT 'X'
INTO Dummy
FROM prs_kenmerkLink
WHERE 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 IS NOT NULL
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
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;
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_DATE(KenmerkWaarde,'DD-MM-YYYY'),'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_eenheid_B_IU)
BEFORE INSERT OR UPDATE ON prs_eenheid
FOR EACH ROW
BEGIN
UPDATE_PRIMARY_KEY(prs_eenheid_key,prs_s_prs_eenheid_key);
UPDATE_UPPER(prs_eenheid_code, prs_eenheid_upper);
CHECK_NOG_REFERENCES(prs_eenheid, prs_eenheid_verwijder, prs_v_aanwezigafdeling,
prs_eenheid_key, 'prs_m179');
UPDATE_AANMAAKDATUM(prs_eenheid, prs_eenheid_aanmaak);
IF :NEW.prs_bedrijf_key <> :OLD.prs_bedrijf_key
OR :OLD.prs_bedrijf_key IS NULL
OR :NEW.prs_bedrijf_key IS NULL
THEN
UPDATE PRS_AFDELING
SET prs_bedrijf_key = :NEW.prs_bedrijf_key
WHERE prs_eenheid_key = :NEW.prs_eenheid_key
AND prs_afdeling_verwijder IS NULL;
END IF;
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_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;
/