Files
Database/BEZ/BEZ_TRI.SRC
Jos Groot Lipman 23ed19da42 FSN#16062
svn path=/Database/trunk/; revision=10280
2010-04-14 08:15:40 +00:00

365 lines
12 KiB
Plaintext

#ifdef BEZ // 03-11-2000 PF
/* $Revision: 31 $
* $Modtime: 12-04-10 9:26 $
*/
#include "comsql.h"
CREATE_TRIGGER(bez_t_bez_afspraak_B_IU)
BEFORE INSERT OR UPDATE ON bez_afspraak
FOR EACH ROW
DECLARE dummy NUMBER;
BEGIN
UPDATE_PRIMARY_KEY(bez_afspraak_key,bez_s_bez_afspraak_key);
dummy := :new.bez_afspraak_key;
IF :new.bez_afspraak_contact_key IS NULL AND :new.prs_perslid_key IS NOT NULL THEN
:new.bez_afspraak_contact_key := :new.prs_perslid_key;
END IF;
IF :new.bez_afspraak_host_key IS NULL AND :new.bez_afspraak_gastheer IS NULL THEN
:new.bez_afspraak_host_key := :new.bez_afspraak_contact_key;
END IF;
IF :new.bez_afspraak_host_key IS NOT NULL THEN
SELECT SUBSTR(prs_perslid_naam_full,1,50)
INTO :new.bez_afspraak_gastheer FROM prs_v_perslid_fullnames_all
WHERE prs_perslid_key=:new.bez_afspraak_host_key;
END IF;
IF :new.alg_onrgoed_keys IS NOT NULL THEN
BEGIN
SELECT SUBSTR (alg_plaatsaanduiding, 1, 30)
INTO :NEW.bez_afspraak_ruimte
FROM alg_v_plaatsaanduiding_all
WHERE alg_onroerendgoed_keys = :NEW.alg_onrgoed_keys AND alg_onroerendgoed_type <> 'L';
EXCEPTION
WHEN OTHERS
THEN
:NEW.bez_afspraak_ruimte := SUBSTR ('*' || :NEW.bez_afspraak_ruimte, 1, 30);
END;
END IF;
END;
/
CREATE_TRIGGER(bez_t_bez_afspraak_d)
AFTER DELETE
ON bez_afspraak
FOR EACH ROW
BEGIN
DELETE FROM bez_bezoekers WHERE bez_afspraak_key=:OLD.bez_afspraak_key;
END;
/
CREATE_TRIGGER(bez_t_bez_bezoekers_B_IU)
BEFORE INSERT OR UPDATE ON bez_bezoekers
FOR EACH ROW
BEGIN
UPDATE_PRIMARY_KEY(bez_bezoekers_key,bez_s_bez_bezoekers_key);
END;
/
CREATE_TRIGGER(bez_t_bez_actie_B_IU)
BEFORE INSERT OR UPDATE ON bez_actie
FOR EACH ROW
BEGIN
UPDATE_PRIMARY_KEY(bez_actie_key,bez_s_bez_actie_key);
END;
/
CREATE_TRIGGER(bez_t_notificatie_afspraak_d)
AFTER DELETE
ON bez_afspraak
FOR EACH ROW
BEGIN
fac.clrnotifications('BEZ%', :OLD.bez_afspraak_key);
END;
/
CREATE_TRIGGER(bez_t_bez_refkenmerk_b_iu)
BEFORE INSERT OR UPDATE ON bez_refkenmerk
FOR EACH ROW
DECLARE
ObjectType USER_OBJECTS.OBJECT_TYPE%TYPE;
BEGIN
UPDATE_PRIMARY_KEY(bez_refkenmerk_key,bez_s_bez_refkenmerk_key);
UPDATE_UPPER(bez_refkenmerk_omschrijving,bez_refkenmerk_upper,bez_refkenmerk);
UPDATE_AANMAAKDATUM(bez_refkenmerk, bez_refkenmerk_aanmaak);
/* Controleer of de ingevulde tablenaam, kolomnaam en kolomtxt
** wel bestaan.
*/
BEGIN
SELECT OBJECT_TYPE
INTO ObjectType
FROM USER_OBJECTS
WHERE OBJECT_NAME = :new.bez_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.bez_refkenmerk_objectnaam
AND COLUMN_NAME = :new.bez_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.bez_refkenmerk_objectnaam
AND COLUMN_NAME = :new.bez_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(bez_t_bez_kenmerk_b_iu)
BEFORE INSERT OR UPDATE ON bez_kenmerk
FOR EACH ROW
BEGIN
UPDATE_PRIMARY_KEY(bez_kenmerk_key, bez_s_bez_kenmerk_key);
UPDATE_UPPER(bez_kenmerk_omschrijving, bez_kenmerk_upper,bez_kenmerk);
IF (:new.bez_kenmerk_verwijder IS NOT NULL AND :old.bez_kenmerk_verwijder IS NULL AND
:new.bez_kenmerk_systeem = 1)
THEN
APPLICATION_ERROR(-20003, 'ALG_M238');
END IF;
IF (:new.bez_kenmerk_kenmerktype IN ('C','N'))
AND :new.bez_kenmerk_lengte IS NULL
THEN
APPLICATION_ERROR(-20000, 'ALG_C_ALG_KENMERK_LENGTE');
END IF;
IF :new.bez_kenmerk_kenmerktype = 'N' AND :old.bez_kenmerk_key IS NOT NULL
THEN
-- An existing property of type N
IF :old.bez_kenmerk_nmin <> :new.bez_kenmerk_nmin OR
(:old.bez_kenmerk_nmin IS NULL AND :new.bez_kenmerk_nmin IS NOT NULL)
THEN
DECLARE
Dummy CHAR;
BEGIN
SELECT 'X'
INTO Dummy
FROM bez_kenmerkwaarde
WHERE FAC.SAFE_TO_NUMBER(bez_kenmerkwaarde_waarde) < :new.bez_kenmerk_nmin
AND bez_kenmerk_key = :old.bez_kenmerk_key;
raise_application_error(-20000, 'BEZ_C_BEZ_KENMERK_MIN');
EXCEPTION
WHEN NO_DATA_FOUND
THEN NULL;
WHEN TOO_MANY_ROWS THEN
BEGIN
raise_application_error(-20000, 'BEZ_C_BEZ_KENMERK_MIN');
END;
END;
END IF;
IF :old.bez_kenmerk_nmax <> :new.bez_kenmerk_nmax OR
(:old.bez_kenmerk_nmax IS NULL AND :new.bez_kenmerk_nmax IS NOT NULL)
THEN
DECLARE
Dummy CHAR;
BEGIN
SELECT 'X'
INTO Dummy
FROM bez_kenmerkwaarde
WHERE FAC.SAFE_TO_NUMBER(bez_kenmerkwaarde_waarde) > :new.bez_kenmerk_nmax
AND bez_kenmerk_key = :old.bez_kenmerk_key;
raise_application_error(-20000, 'BEZ_C_BEZ_KENMERK_MAX');
EXCEPTION
WHEN NO_DATA_FOUND
THEN NULL;
WHEN TOO_MANY_ROWS THEN
BEGIN
raise_application_error(-20000, 'BEZ_C_BEZ_KENMERK_MIN');
END;
END;
END IF;
END IF;
UPDATE_AANMAAKDATUM(bez_kenmerk, bez_kenmerk_aanmaak);
END;
/
CREATE_TRIGGER(bez_t_bez_kenmerkwaarde_b_iu)
BEFORE INSERT OR UPDATE ON bez_kenmerkwaarde
FOR EACH ROW
BEGIN
UPDATE_AANMAAKDATUM(bez_kenmerkwaarde, bez_kenmerkwaarde_aanmaak);
/*
** Controleer eerst of de ingevulde waarde goed is.
*/
IF (:new.bez_kenmerkwaarde_waarde <> :old.bez_kenmerkwaarde_waarde
OR :old.bez_kenmerkwaarde_waarde IS NULL
OR :new.bez_kenmerkwaarde_waarde IS NULL)
AND :new.bez_bezoekers_key IS NOT NULL
THEN
DECLARE
KenmerkOmschr bez_kenmerk.bez_kenmerk_omschrijving%TYPE;
KenmerkType bez_kenmerk.bez_kenmerk_kenmerktype%TYPE;
KenmerkLengte bez_kenmerk.bez_kenmerk_lengte%TYPE;
KenmerkDec bez_kenmerk.bez_kenmerk_dec%TYPE;
KenmerkNMin bez_kenmerk.bez_kenmerk_nmin%TYPE;
KenmerkNMax bez_kenmerk.bez_kenmerk_nmax%TYPE;
RefKenmerkKey NUMBER(10);
NumberWaarde NUMBER(15,5);
FormatMask VARCHAR2(60);
KenmerkWaarde bez_kenmerkwaarde.bez_kenmerkwaarde_waarde%TYPE;
BEGIN
KenmerkWaarde := :new.bez_kenmerkwaarde_waarde;
BEGIN
SELECT bez_kenmerk_omschrijving
, bez_kenmerk_kenmerktype
, bez_kenmerk_lengte
, bez_kenmerk_dec
, bez_kenmerk_nmin
, bez_kenmerk_nmax
, bez_refkenmerk_key
INTO KenmerkOmschr
, KenmerkType
, KenmerkLengte
, KenmerkDec
, KenmerkNMin
, KenmerkNMax
, RefKenmerkKey
FROM bez_kenmerk
WHERE bez_kenmerk_key = :new.bez_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
NumberWaarde := TO_NUMBER(KenmerkWaarde);
EXCEPTION
WHEN OTHERS
THEN FormatMask := REPLACE(FormatMask, '9', '#');
FormatMask := REPLACE(FormatMask, '0', '#');
FormatMask := REPLACE(FormatMask, 'D', '.');
RAISE_APPLICATION_ERROR(-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.bez_kenmerkwaarde_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.bez_kenmerkwaarde_waarde := KenmerkWaarde;
END IF;
END;
/*
** Ken nu een key aan dit record toe.
*/
IF :new.bez_kenmerkwaarde_key IS NULL
THEN
SELECT bez_s_bez_kenmerkwaarde_key.nextval
INTO :new.bez_kenmerkwaarde_key
FROM DUAL;
END IF;
END IF;
END;
/
#endif // BEZ