FSN#16062
svn path=/Database/trunk/; revision=10272
This commit is contained in:
290
BEZ/BEZ_TRI.SRC
290
BEZ/BEZ_TRI.SRC
@@ -1,7 +1,7 @@
|
||||
#ifdef BEZ // 03-11-2000 PF
|
||||
|
||||
/* $Revision: 29 $
|
||||
* $Modtime: 30-11-09 15:35 $
|
||||
/* $Revision: 30 $
|
||||
* $Modtime: 30-03-10 12:00 $
|
||||
*/
|
||||
|
||||
#include "comsql.h"
|
||||
@@ -76,4 +76,290 @@ BEGIN
|
||||
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');
|
||||
END IF;
|
||||
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
|
||||
|
||||
Reference in New Issue
Block a user