Files
Database/BES/BES_TRI.SRC
Erik Groener 31bc06047f AAGB#75630 Graag kolom ins_srtkenmerk_code toevoegen aan tabel
svn path=/Database/trunk/; revision=59409
2023-03-02 12:21:44 +00:00

633 lines
24 KiB
Plaintext

#ifdef BES // 03-11-2000 PF
/* BES_TRI.SRC
* $Revision$
* $Id$
*/
CREATE_TRIGGER(bes_t_bes_srtgroep_B_IU)
BEFORE INSERT OR UPDATE ON bes_srtgroep
FOR EACH ROW
BEGIN
UPDATE_PRIMARY_KEY(bes_srtgroep_key,bes_s_bes_srtgroep_key);
SET_VERWIJDER_CHILDREN(bes_srtdeel, bes_srtgroep_key, bes_srtgroep_verwijder,
bes_srtdeel_verwijder,bes_srtgroep);
END;
/
CREATE_TRIGGER(bes_t_bes_srtdeel_B_IU)
BEFORE INSERT OR UPDATE ON bes_srtdeel
FOR EACH ROW
BEGIN
UPDATE_PRIMARY_KEY(bes_srtdeel_key,bes_s_bes_srtdeel_key);
END;
/
/*
* Wat info:
* Oorspronkelijk was er een complex mechanisme met redundante info met betrekking
* tot de status van bestelling en bestelopdracht
* - per regel wordt bijgehouden hoeveel stuks gevraagd en hoeveel geleverd
* - per bestelling/opdracht werd bijgehouden hoeveel regel gevraagd en geleverd
* - mutaties daarvan werden met triggers conistent gehouden
*
* Dit is vervallen. Elke trigger bemoeit zich alleen met zichzelf, en er zijn
* een tweetal functies bes.updatebestellingstatus en bes.updatebestelopdrstatus
* die desgevraagd tellen wat de stand is en daarop zonodig de parent aanpassen
* Daarvan wordt dan ook tracjking bijgehouden.
*/
CREATE_TRIGGER(bes_t_bes_bestelling_B_IU)
BEFORE INSERT OR UPDATE ON bes_bestelling
FOR EACH ROW
BEGIN
UPDATE_PRIMARY_KEY(bes_bestelling_key,bes_s_bes_bestelling_key);
IF :old.bes_bestelling_status IS NULL
THEN
-- weet niet of dit (nog)nodig is, om de status op 2 te zetten
:NEW.bes_bestelling_status := 2;
--fac.trackaction ('BESAP2', :new.bes_bestelling_key, NULL , NULL, NULL);
END IF;
-- gooi fiatverzoeknotificaties weg als gefiatteerd of afgewezen-> opnemen in bovenste deel
IF (:new.bes_bestelling_status = 3 AND :old.bes_bestelling_status <> 3)
OR (:new.bes_bestelling_status = 1 AND :old.bes_bestelling_status <> 1)
THEN
fac.clrnotifications ('BESAP1', :new.bes_bestelling_key);
END IF;
END;
/
CREATE_TRIGGER(bes_t_bes_bestelling_a_d)
AFTER DELETE
ON bes_bestelling
FOR EACH ROW
BEGIN
-- Alle BES% weggooien. XML generatie zou er toch op falen
fac.clrnotifications ('BES%', :old.bes_bestelling_key);
END;
/
CREATE_TRIGGER(bes_t_bes_bestelling_item_B_IU)
BEFORE INSERT OR UPDATE
ON bes_bestelling_item
FOR EACH ROW
BEGIN
UPDATE_PRIMARY_KEY(bes_bestelling_item_key,bes_s_bes_bestelling_item_key);
END;
/
CREATE_TRIGGER(bes_t_bes_bestelopdr_B_IU)
BEFORE INSERT OR UPDATE
ON bes_bestelopdr
FOR EACH ROW
BEGIN
UPDATE_PRIMARY_KEY(bes_bestelopdr_key,bes_s_bes_bestelopdr_key);
IF :OLD.bes_bestelopdr_datum IS NULL
THEN
:NEW.bes_bestelopdr_datum := SYSDATE;
END IF;
IF :OLD.bes_bestelopdr_status IS NULL
THEN
:NEW.bes_bestelopdr_status := 2;
END IF;
END;
/
CREATE_TRIGGER(bes_t_bes_bestelopdr_item_B_IU)
BEFORE INSERT OR UPDATE
ON bes_bestelopdr_item
FOR EACH ROW
BEGIN
UPDATE_PRIMARY_KEY(bes_bestelopdr_item_key,bes_s_bes_bestelopdr_item_key);
END;
/
CREATE_TRIGGER(bes_t_bes_bestellevr_B_IU)
BEFORE INSERT OR UPDATE
ON bes_bestellevr
FOR EACH ROW
BEGIN
UPDATE_PRIMARY_KEY(bes_bestellevr_key,bes_s_bes_bestellevr_key);
END;
/
CREATE_TRIGGER(bes_t_bes_bestellevr_item_B_IU)
BEFORE INSERT OR UPDATE
ON bes_bestellevr_item
FOR EACH ROW
BEGIN
UPDATE_PRIMARY_KEY(bes_bestellevr_item_key,bes_s_bes_bestellevr_item_key);
END;
/
CREATE_TRIGGER(bes_t_bes_bestelopdr_item_b_u)
BEFORE UPDATE
ON bes_bestelopdr_item
FOR EACH ROW
BEGIN
-- Bewaak het aantal geleverde regels
IF NVL(:new.bes_bestelopdr_item_aantalontv,0) = NVL(:new.bes_bestelopdr_item_aantal,0)
AND NVL(:old.bes_bestelopdr_item_aantalontv,0) <> NVL(:old.bes_bestelopdr_item_aantal,0)
THEN
-- Deze opdrachtregel is geleverd
:NEW.bes_bestelopdr_item_status := 6;
-- Maar daarmee ook de corresponderende aanvraagregel(s)
-- Merk op: het overbodige bes_bestelling_item_aantalontv wordt in de ASP bijgehouden
UPDATE bes_bestelling_item
SET bes_bestelling_item_status = 6
WHERE bes_bestelopdr_item_key = :new.bes_bestelopdr_item_key;
END IF;
END;
/
CREATE_TRIGGER(bes_t_bes_bestelling_item_b_u)
BEFORE UPDATE
ON bes_bestelling_item
FOR EACH ROW
BEGIN
IF :NEW.bes_bestelopdr_item_key IS NOT NULL AND :OLD.bes_bestelopdr_item_key IS NULL
THEN
-- deze aanvraag is nu in een opdracht opgenomen
:NEW.bes_bestelling_item_status := 5;
-- Daarmee krijgt de gehele aanvraag de status 5 (als dat al niet zo was)
bes.setbestellingstatus(:new.bes_bestelling_key, 5, NULL);
END IF;
-- Merk op: bijna altijd zal de status al wel op 6 gezet zijn door bes_t_bes_bestelopdr_item_b_u
-- zie FSN#19735
IF NVL (:NEW.bes_bestelling_item_aantalontv, 0) = NVL (:NEW.bes_bestelling_item_aantal, 0)
AND NVL (:OLD.bes_bestelling_item_aantalontv, 0) <> NVL (:OLD.bes_bestelling_item_aantal, 0)
THEN
-- deze hele regel is nu geleverd
:NEW.bes_bestelling_item_status := 6;
END IF;
END;
/
AUDIT_BEGIN(bes_disc_params)
AUDIT_VALUE(bes_disc_params, bes_disc_params_bestellimiet)
AUDIT_VALUE(bes_disc_params, bes_disc_params_bestellimiet2)
AUDIT_VALUE(bes_disc_params, bes_disc_params_bestellimiet3)
AUDIT_VALUE(bes_disc_params, bes_disc_params_bestellimiet4)
AUDIT_VALUE(bes_disc_params, bes_disc_params_bestellimiet5)
AUDIT_VALUE(bes_disc_params, bes_disc_params_min_bedrag)
AUDIT_VALUE(bes_disc_params, bes_disc_params_auto_order)
AUDIT_VALUE(bes_disc_params, bes_disc_params_autoacceptrfo)
AUDIT_VALUE(bes_disc_params, bes_disc_params_herfiat)
AUDIT_VALUE(bes_disc_params, bes_disc_params_herfiatpct)
AUDIT_VALUE(bes_disc_params, bes_disc_params_herfiatmarge)
AUDIT_VALUE(bes_disc_params, bes_disc_params_factuurpct)
AUDIT_VALUE(bes_disc_params, bes_disc_params_factuurmarge)
AUDIT_VALUE(bes_disc_params, bes_disc_params_factmatchmode)
AUDIT_VALUE(bes_disc_params, bes_disc_params_factuurappr)
AUDIT_VALUE(bes_disc_params, bes_disc_params_factuurgrens)
AUDIT_VALUE(bes_disc_params, bes_disc_params_pgb)
AUDIT_VALUE(bes_disc_params, bes_disc_params_leverdagen)
AUDIT_VALUE(bes_disc_params, bes_disc_params_remoteconfirm)
AUDIT_VALUE(bes_disc_params, bes_disc_params_freeartikel)
AUDIT_VALUE(bes_disc_params, bes_disc_params_punchouturl)
AUDIT_VALUE(bes_disc_params, bes_disc_params_punch_bedr_key)
AUDIT_VALUE(bes_disc_params, bes_disc_params_logo_url)
AUDIT_VALUE(bes_disc_params, bes_disc_params_noti_dagen)
AUDIT_VALUE(bes_disc_params, bes_disc_params_noti_opdr)
AUDIT_VALUE(bes_disc_params, bes_disc_params_bonotify)
AUDIT_VALUE(bes_disc_params, bes_disc_params_retour)
AUDIT_VALUE(bes_disc_params, bes_disc_params_retour_url)
AUDIT_VALUE(bes_disc_params, bes_disc_params_levopm_url)
AUDIT_VALUE(bes_disc_params, bes_ins_discipline_key_inkoop)
AUDIT_VALUE(bes_disc_params, bes_disc_params_singlegroep)
AUDIT_VALUE(bes_disc_params, bes_disc_params_kpautorisatie)
AUDIT_VALUE(bes_disc_params, bes_disc_params_maxartikel)
AUDIT_VALUE(bes_disc_params, bes_disc_params_contract)
AUDIT_VALUE(bes_disc_params, bes_disc_params_cnt_disckey)
AUDIT_VALUE(bes_disc_params, bes_disc_params_cnt_termijn)
AUDIT_VALUE(bes_disc_params, bes_disc_params_cnt_opzegterm)
AUDIT_VALUE(bes_disc_params, bes_disc_params_for_others)
AUDIT_END()
CREATE_TRIGGER(BES_T_BES_DISC_PARAMS_B_IU)
BEFORE INSERT OR UPDATE ON bes_disc_params
FOR EACH ROW
BEGIN
UPDATE_PRIMARY_KEY(bes_disc_params_key, bes_s_bes_disc_params_key);
END;
/
CREATE_TRIGGER(bes_t_bes_srtkenmerk_b_iu)
BEFORE INSERT OR UPDATE
ON bes_srtkenmerk
FOR EACH ROW
BEGIN
UPDATE_PRIMARY_KEY(bes_srtkenmerk_key, bes_s_bes_srtkenmerk_key);
UPDATE_UPPER(bes_srtkenmerk_omschrijving, bes_srtkenmerk_upper,bes_srtkenmerk);
UPDATE_UPPER(bes_srtkenmerk_code, bes_srtkenmerk_code, bes_srtkenmerk);
UPDATE_AANMAAKDATUM(bes_srtkenmerk,bes_srtkenmerk_aanmaak);
IF (:new.bes_srtkenmerk_verwijder IS NOT NULL AND :old.bes_srtkenmerk_verwijder IS NULL AND
:new.bes_srtkenmerk_systeem = 1)
THEN
raise_application_error(-20000, 'bes_C_bes_SRTKENMERK_SYSTEEM');
END IF;
IF :NEW.bes_srtkenmerk_kenmerktype IN ('C', 'N', 'B') AND :NEW.bes_srtkenmerk_lengte IS NULL
THEN
raise_application_error(-20000, 'bes_C_bes_SRTKENMERK_LENGTE');
END IF;
-- Numeriek mag niet te lang zijn (numeric overflow)
IF :new.bes_srtkenmerk_kenmerktype IN ('N', 'B') AND :new.bes_srtkenmerk_lengte > 20
THEN
:new.bes_srtkenmerk_lengte := 20;
END IF;
IF :NEW.bes_srtkenmerk_kenmerktype IN ('N', 'B') AND :OLD.bes_srtkenmerk_key IS NOT NULL
THEN
IF :OLD.bes_srtkenmerk_nmin <> :NEW.bes_srtkenmerk_nmin
OR (:OLD.bes_srtkenmerk_nmin IS NULL AND :NEW.bes_srtkenmerk_nmin IS NOT NULL)
THEN
DECLARE
dummy CHAR;
BEGIN
SELECT 'X'
INTO dummy
FROM (SELECT 'X'
FROM bes_kenmerkbestell
WHERE fac.safe_to_number (bes_kenmerkbestell_waarde) < :NEW.bes_srtkenmerk_nmin
AND bes_kenmerk_key IN (SELECT bes_kenmerk_key
FROM bes_kenmerk
WHERE bes_srtkenmerk_key = :OLD.bes_srtkenmerk_key)
UNION ALL
SELECT 'X'
FROM bes_kenmerkbesteli
WHERE fac.safe_to_number (bes_kenmerkbesteli_waarde) < :NEW.bes_srtkenmerk_nmin
AND bes_kenmerk_key IN (SELECT bes_kenmerk_key
FROM bes_kenmerk
WHERE bes_srtkenmerk_key = :OLD.bes_srtkenmerk_key));
raise_application_error(-20000, 'bes_C_bes_SRTKENMERK_MIN');
EXCEPTION
WHEN NO_DATA_FOUND
THEN
NULL;
WHEN TOO_MANY_ROWS
THEN
raise_application_error(-20000, 'bes_C_bes_SRTKENMERK_MIN');
END;
END IF;
IF :OLD.bes_srtkenmerk_nmax <> :NEW.bes_srtkenmerk_nmax
OR (:OLD.bes_srtkenmerk_nmax IS NULL AND :NEW.bes_srtkenmerk_nmax IS NOT NULL)
THEN
DECLARE
dummy CHAR;
BEGIN
SELECT 'X'
INTO dummy
FROM (SELECT 'X'
FROM bes_kenmerkbestell
WHERE fac.safe_to_number (bes_kenmerkbestell_waarde) > :NEW.bes_srtkenmerk_nmax
AND bes_kenmerk_key IN (SELECT bes_kenmerk_key
FROM bes_kenmerk
WHERE bes_srtkenmerk_key = :OLD.bes_srtkenmerk_key)
UNION ALL
SELECT 'X'
FROM bes_kenmerkbesteli
WHERE fac.safe_to_number (bes_kenmerkbesteli_waarde) > :NEW.bes_srtkenmerk_nmax
AND bes_kenmerk_key IN (SELECT bes_kenmerk_key
FROM bes_kenmerk
WHERE bes_srtkenmerk_key = :OLD.bes_srtkenmerk_key));
raise_application_error(-20000, 'bes_C_bes_SRTKENMERK_MAX');
EXCEPTION
WHEN NO_DATA_FOUND
THEN
NULL;
WHEN TOO_MANY_ROWS
THEN
raise_application_error(-20000, 'bes_C_bes_SRTKENMERK_MAX');
END;
END IF;
END IF;
END;
/
CREATE_TRIGGER(bes_t_bes_kenmerk_b_iu)
BEFORE INSERT OR UPDATE
ON bes_kenmerk
FOR EACH ROW
BEGIN
-- FSN#13902: we tolereren het achteraf verplicht maken
UPDATE_PRIMARY_KEY(bes_kenmerk_key, bes_s_bes_kenmerk_key);
UPDATE_AANMAAKDATUM(bes_kenmerk, bes_kenmerk_aanmaak);
UPDATE_UPPER(bes_kenmerk_code, bes_kenmerk_code, bes_kenmerk);
END;
/
CREATE_TRIGGER(bes_t_bes_kenmerkbestell_b_iu)
BEFORE INSERT OR UPDATE
ON bes_kenmerkbestell
FOR EACH ROW
BEGIN
UPDATE_PRIMARY_KEY(bes_kenmerkbestell_key, bes_s_bes_kenmerkbestell_key);
-- Controleer eerst of de ingevulde waarde goed is.
--
IF :NEW.bes_kenmerkbestell_waarde <> :OLD.bes_kenmerkbestell_waarde
OR :OLD.bes_kenmerkbestell_waarde IS NULL
OR :NEW.bes_kenmerkbestell_waarde IS NULL
THEN
DECLARE
srtkenmerkomschr bes_srtkenmerk.bes_srtkenmerk_omschrijving%TYPE;
srtkenmerktype bes_srtkenmerk.bes_srtkenmerk_kenmerktype%TYPE;
srtkenmerklengte bes_srtkenmerk.bes_srtkenmerk_lengte%TYPE;
srtkenmerkdec bes_srtkenmerk.bes_srtkenmerk_dec%TYPE;
srtkenmerknmin bes_srtkenmerk.bes_srtkenmerk_nmin%TYPE;
srtkenmerknmax bes_srtkenmerk.bes_srtkenmerk_nmax%TYPE;
kenmerkverplicht bes_kenmerk.bes_kenmerk_verplicht%TYPE;
numberwaarde NUMBER (25,5);
formatmask VARCHAR2 (60);
kenmerkbestellingwaarde bes_kenmerkbestell.bes_kenmerkbestell_waarde%TYPE;
BEGIN
kenmerkbestellingwaarde := :NEW.bes_kenmerkbestell_waarde;
--
SELECT bes_sk.bes_srtkenmerk_omschrijving, bes_sk.bes_srtkenmerk_kenmerktype, bes_sk.bes_srtkenmerk_lengte,
bes_sk.bes_srtkenmerk_dec, bes_sk.bes_srtkenmerk_nmin, bes_sk.bes_srtkenmerk_nmax,
bes_k.bes_kenmerk_verplicht
INTO srtkenmerkomschr, srtkenmerktype, srtkenmerklengte,
srtkenmerkdec, srtkenmerknmin, srtkenmerknmax,
kenmerkverplicht
FROM bes_srtkenmerk bes_sk, bes_kenmerk bes_k
WHERE bes_sk.bes_srtkenmerk_key = bes_k.bes_srtkenmerk_key AND bes_k.bes_kenmerk_key = :NEW.bes_kenmerk_key;
--
-- Controleer eerst of het verplichte veld ingevuld is.
--
IF kenmerkverplicht IS NOT NULL AND kenmerkbestellingwaarde IS NULL
THEN
APPLICATION_ERROR_GOTO(-20004, 'bes_m240,' || srtkenmerkomschr);
--
-- Kijk welk KenmerkType gebruikt wordt.
-- Aan de hand daarvan moet een controle uitgevoerd worden.
--
ELSIF srtkenmerktype = 'C'
THEN
-- CHAR
-- Controleer of de lengte te groot of goed is.
IF LENGTH (kenmerkbestellingwaarde) > srtkenmerklengte
THEN
APPLICATION_ERROR_GOTO(-20004, 'bes_m241,' || srtkenmerkomschr || ',' || TO_CHAR (srtkenmerklengte));
END IF;
ELSIF srtkenmerktype IN ('N', 'B')
THEN
-- NUMBER
-- Controleer of er een numerieke waarde ingevuld is.
IF srtkenmerkdec IS NULL OR srtkenmerkdec = 0
THEN
formatmask := RPAD ('9', srtkenmerklengte, '9');
ELSE
formatmask := RPAD ('9', srtkenmerklengte - srtkenmerkdec, '9') || 'D' || RPAD ('9', srtkenmerkdec, '9');
END IF;
--
BEGIN
numberwaarde := TO_NUMBER (kenmerkbestellingwaarde);
EXCEPTION
WHEN OTHERS
THEN
formatmask := REPLACE (formatmask, '9', '#');
formatmask := REPLACE (formatmask, '0', '#');
formatmask := REPLACE (formatmask, 'D', '.');
APPLICATION_ERROR_GOTO(-20004, 'bes_m242,' || srtkenmerkomschr || ',' || formatmask);
END;
-- Controleer of de waarde binnen NMin en NMax ligt.
IF (srtkenmerknmin IS NOT NULL AND numberwaarde < srtkenmerknmin)
OR (srtkenmerknmax IS NOT NULL AND numberwaarde > srtkenmerknmax)
THEN
APPLICATION_ERROR_GOTO(-20004,
'bes_m243,'
|| srtkenmerkomschr
|| ','
|| TO_CHAR (srtkenmerknmin)
|| ','
|| TO_CHAR (srtkenmerknmax)
);
ELSE
-- Controleer of de waarde aan het formaat voldoet.
kenmerkbestellingwaarde := LTRIM (NUMBER_TO_CHAR (numberwaarde, formatmask));
IF INSTR2 (kenmerkbestellingwaarde, '#') <> 0
THEN
formatmask := REPLACE (formatmask, '9', '#');
formatmask := REPLACE (formatmask, '0', '#');
formatmask := REPLACE (formatmask, 'D', '.');
APPLICATION_ERROR_GOTO(-20004, 'bes_m242,' || srtkenmerkomschr || ',' || formatmask);
END IF;
END IF;
-- Zet de geconverteerde waarde terug.
:NEW.bes_kenmerkbestell_waarde := kenmerkbestellingwaarde;
ELSIF srtkenmerktype = 'D'
THEN
-- DATUM
kenmerkbestellingwaarde := DATE_TO_CHAR(_TO_DATE2(kenmerkbestellingwaarde, 'DD-MM-YY'), 'DD-MM-YYYY');
-- Zet de geconverteerde waarde terug.
:NEW.bes_kenmerkbestell_waarde := kenmerkbestellingwaarde;
END IF;
END;
END IF;
END;
/
CREATE_TRIGGER(bes_t_bes_kenmerkbesteli_b_iu)
BEFORE INSERT OR UPDATE
ON bes_kenmerkbesteli
FOR EACH ROW
BEGIN
UPDATE_PRIMARY_KEY(bes_kenmerkbesteli_key, bes_s_bes_kenmerkbesteli_key);
-- Controleer eerst of de ingevulde waarde goed is.
--
IF :NEW.bes_kenmerkbesteli_waarde <> :OLD.bes_kenmerkbesteli_waarde
OR :OLD.bes_kenmerkbesteli_waarde IS NULL
OR :NEW.bes_kenmerkbesteli_waarde IS NULL
THEN
DECLARE
srtkenmerkomschr bes_srtkenmerk.bes_srtkenmerk_omschrijving%TYPE;
srtkenmerktype bes_srtkenmerk.bes_srtkenmerk_kenmerktype%TYPE;
srtkenmerklengte bes_srtkenmerk.bes_srtkenmerk_lengte%TYPE;
srtkenmerkdec bes_srtkenmerk.bes_srtkenmerk_dec%TYPE;
srtkenmerknmin bes_srtkenmerk.bes_srtkenmerk_nmin%TYPE;
srtkenmerknmax bes_srtkenmerk.bes_srtkenmerk_nmax%TYPE;
kenmerkverplicht bes_kenmerk.bes_kenmerk_verplicht%TYPE;
numberwaarde NUMBER (25,5);
formatmask VARCHAR2 (60);
kenmerkbestelitemwaarde bes_kenmerkbesteli.bes_kenmerkbesteli_waarde%TYPE;
BEGIN
kenmerkbestelitemwaarde := :NEW.bes_kenmerkbesteli_waarde;
--
SELECT bes_sk.bes_srtkenmerk_omschrijving, bes_sk.bes_srtkenmerk_kenmerktype, bes_sk.bes_srtkenmerk_lengte,
bes_sk.bes_srtkenmerk_dec, bes_sk.bes_srtkenmerk_nmin, bes_sk.bes_srtkenmerk_nmax,
bes_k.bes_kenmerk_verplicht
INTO srtkenmerkomschr, srtkenmerktype, srtkenmerklengte,
srtkenmerkdec, srtkenmerknmin, srtkenmerknmax,
kenmerkverplicht
FROM bes_srtkenmerk bes_sk, bes_kenmerk bes_k
WHERE bes_sk.bes_srtkenmerk_key = bes_k.bes_srtkenmerk_key AND bes_k.bes_kenmerk_key = :NEW.bes_kenmerk_key;
--
-- Controleer eerst of het verplichte veld ingevuld is.
--
IF kenmerkverplicht IS NOT NULL AND kenmerkbestelitemwaarde IS NULL
THEN
APPLICATION_ERROR_GOTO(-20004, 'bes_m240,' || srtkenmerkomschr);
--
-- Kijk welk KenmerkType gebruikt wordt.
-- Aan de hand daarvan moet een controle uitgevoerd worden.
--
ELSIF srtkenmerktype = 'C'
THEN
-- CHAR
-- Controleer of de lengte te groot of goed is.
IF LENGTH (kenmerkbestelitemwaarde) > srtkenmerklengte
THEN
APPLICATION_ERROR_GOTO(-20004, 'bes_m241,' || srtkenmerkomschr || ',' || TO_CHAR (srtkenmerklengte));
END IF;
ELSIF srtkenmerktype IN ('N', 'B')
THEN
-- NUMBER
-- Controleer of er een numerieke waarde ingevuld is.
IF srtkenmerkdec IS NULL OR srtkenmerkdec = 0
THEN
formatmask := RPAD ('9', srtkenmerklengte, '9');
ELSE
formatmask := RPAD ('9', srtkenmerklengte - srtkenmerkdec, '9') || 'D' || RPAD ('9', srtkenmerkdec, '9');
END IF;
--
BEGIN
numberwaarde := TO_NUMBER (kenmerkbestelitemwaarde);
EXCEPTION
WHEN OTHERS
THEN
formatmask := REPLACE (formatmask, '9', '#');
formatmask := REPLACE (formatmask, '0', '#');
formatmask := REPLACE (formatmask, 'D', '.');
APPLICATION_ERROR_GOTO(-20004, 'bes_m242,' || srtkenmerkomschr || ',' || formatmask);
END;
-- Controleer of de waarde binnen NMin en NMax ligt.
IF (srtkenmerknmin IS NOT NULL AND numberwaarde < srtkenmerknmin)
OR (srtkenmerknmax IS NOT NULL AND numberwaarde > srtkenmerknmax)
THEN
APPLICATION_ERROR_GOTO(-20004,
'bes_m243,'
|| srtkenmerkomschr
|| ','
|| TO_CHAR (srtkenmerknmin)
|| ','
|| TO_CHAR (srtkenmerknmax)
);
ELSE
-- Controleer of de waarde aan het formaat voldoet.
kenmerkbestelitemwaarde := LTRIM (NUMBER_TO_CHAR (numberwaarde, formatmask));
IF INSTR2 (kenmerkbestelitemwaarde, '#') <> 0
THEN
formatmask := REPLACE (formatmask, '9', '#');
formatmask := REPLACE (formatmask, '0', '#');
formatmask := REPLACE (formatmask, 'D', '.');
APPLICATION_ERROR_GOTO(-20004, 'bes_m242,' || srtkenmerkomschr || ',' || formatmask);
END IF;
END IF;
-- Zet de geconverteerde waarde terug.
:NEW.bes_kenmerkbesteli_waarde := kenmerkbestelitemwaarde;
ELSIF srtkenmerktype = 'D'
THEN
-- DATUM
kenmerkbestelitemwaarde := DATE_TO_CHAR(_TO_DATE2(kenmerkbestelitemwaarde, 'DD-MM-YY'), 'DD-MM-YYYY');
-- Zet de geconverteerde waarde terug.
:NEW.bes_kenmerkbesteli_waarde := kenmerkbestelitemwaarde;
END IF;
END;
END IF;
END;
/
CREATE_TRIGGER(bes_t_bes_favoriet_b_iu)
BEFORE INSERT OR UPDATE ON bes_favoriet
FOR EACH ROW
BEGIN
UPDATE_PRIMARY_KEY(bes_favoriet_key, bes_s_bes_favoriet_key);
END;
/
CREATE_TRIGGER(bes_t_bes_staffeltabel_b_iu)
BEFORE INSERT OR UPDATE ON bes_staffeltabel
FOR EACH ROW
BEGIN
UPDATE_PRIMARY_KEY(bes_staffeltabel_key, bes_s_bes_staffeltabel_key);
END;
/
CREATE_TRIGGER(bes_t_bes_staffel_b_iu)
BEFORE INSERT OR UPDATE ON bes_staffel
FOR EACH ROW
BEGIN
UPDATE_PRIMARY_KEY(bes_staffel_key, bes_s_bes_staffel_key);
END;
/
CREATE_TRIGGER(bes_t_bes_srtprod_B_IU)
BEFORE INSERT OR UPDATE ON bes_srtprod
FOR EACH ROW
BEGIN
UPDATE_PRIMARY_KEY(bes_srtprod_key, bes_s_bes_srtprod_key);
END;
/
CREATE_TRIGGER(bes_t_bes_grootheid_B_IU)
BEFORE INSERT OR UPDATE ON bes_grootheid
FOR EACH ROW
BEGIN
UPDATE_PRIMARY_KEY(bes_grootheid_key, bes_s_bes_grootheid_key);
END;
/
CREATE_TRIGGER(bes_t_bes_srtdeel_prijs_B_IU)
BEFORE INSERT OR UPDATE ON bes_srtdeel_prijs
FOR EACH ROW
BEGIN
UPDATE_PRIMARY_KEY(bes_srtdeel_prijs_key, bes_s_bes_srtdeel_prijs_key);
END;
/
CREATE_TRIGGER(bes_t_bes_srtprod_prijs_B_IU)
BEFORE INSERT OR UPDATE ON bes_srtprod_prijs
FOR EACH ROW
BEGIN
UPDATE_PRIMARY_KEY(bes_srtprod_prijs_key, bes_s_bes_srtprod_prijs_key);
END;
/
CREATE_TRIGGER(bes_t_bes_bedrijf_srtprod_BIU)
BEFORE INSERT OR UPDATE ON bes_bedrijf_srtprod
FOR EACH ROW
BEGIN
UPDATE_PRIMARY_KEY(bes_bedrijf_srtprod_key, bes_s_bes_bedrijf_srtprod_key);
END;
/
CREATE_TRIGGER(bes_t_bes_bedrijf_bedrijf_B_IU)
BEFORE INSERT OR UPDATE ON bes_bedrijf_bedrijf
FOR EACH ROW
BEGIN
UPDATE_PRIMARY_KEY(bes_bedrijf_bedrijf_key, bes_s_bes_bedrijf_bedrijf_key);
END;
/
REGISTERRUN('$Id$')
#endif // BES