#ifdef  MLD // 13-03-96 AH
/*
 * $Revision$
 * $Id$
 */
CREATE_TRIGGER(mld_t_mld_behandelgroep_B_IU)
BEFORE INSERT OR UPDATE ON mld_behandelgroep
FOR EACH ROW
BEGIN
  UPDATE_PRIMARY_KEY(mld_behandelgroep_key, mld_s_mld_behandelgroep_key);
END;
/

CREATE_TRIGGER(mld_t_mld_melding_tag_B_I)
BEFORE INSERT ON mld_melding_tag
FOR EACH ROW
BEGIN
  UPDATE_PRIMARY_KEY(mld_melding_tag_key, mld_s_mld_melding_tag_key);
END;
/

AUDIT_BEGIN(mld_disc_params)
AUDIT_VALUE(mld_disc_params, mld_behandelgroep_key)
AUDIT_VALUE(mld_disc_params, mld_disc_params_bestellimiet)
AUDIT_VALUE(mld_disc_params, mld_disc_params_bestellimiet2)
AUDIT_VALUE(mld_disc_params, mld_disc_params_bestellimiet3)
AUDIT_VALUE(mld_disc_params, mld_disc_params_bestellimiet4)
AUDIT_VALUE(mld_disc_params, mld_disc_params_bestellimiet5)
AUDIT_VALUE(mld_disc_params, mld_disc_params_pgb)
AUDIT_VALUE(mld_disc_params, mld_disc_params_startdatum)
AUDIT_VALUE(mld_disc_params, mld_disc_params_directklaar)
AUDIT_VALUE(mld_disc_params, mld_disc_params_keten)
AUDIT_VALUE(mld_disc_params, mld_disc_params_frontendprio)
AUDIT_VALUE(mld_disc_params, mld_disc_params_eigen_kp)
AUDIT_VALUE(mld_disc_params, mld_disc_params_factuurpct)
AUDIT_VALUE(mld_disc_params, mld_disc_params_factuurmarge)
AUDIT_VALUE(mld_disc_params, mld_disc_params_factmatchmode)
AUDIT_VALUE(mld_disc_params, mld_disc_params_factuurappr)
AUDIT_VALUE(mld_disc_params, mld_disc_params_factuurgrens)
AUDIT_VALUE(mld_disc_params, mld_disc_params_bonotify)
AUDIT_VALUE(mld_disc_params, mld_disc_params_benotify)
AUDIT_VALUE(mld_disc_params, mld_disc_params_notify)
AUDIT_VALUE(mld_disc_params, mld_disc_params_noti_dagen)
AUDIT_VALUE(mld_disc_params, mld_disc_params_opdr_kosten)
AUDIT_VALUE(mld_disc_params, fac_activiteit_key)
AUDIT_VALUE(mld_disc_params, mld_disc_params_offerteauto)
AUDIT_VALUE(mld_disc_params, mld_disc_params_fenotes)
AUDIT_VALUE(mld_disc_params, mld_disc_params_offhours)
AUDIT_END()

CREATE_TRIGGER(mld_t_mld_disc_params_b_iu)
BEFORE INSERT OR UPDATE ON mld_disc_params
FOR EACH ROW
BEGIN
   UPDATE_PRIMARY_KEY(mld_disc_params_key, mld_s_mld_disc_params_key);
END;
/

CREATE_TRIGGER(mld_t_mld_vervolg_beperking_B_I)
BEFORE INSERT ON mld_vervolg_beperking
FOR EACH ROW
BEGIN
    UPDATE_PRIMARY_KEY(mld_vervolg_beperking_key,mld_s_mld_vervolg_beperking_key);
END;
/

CREATE_TRIGGER(mld_t_mld_oorzaak_B_IU)
BEFORE INSERT OR UPDATE ON mld_oorzaak
FOR EACH ROW
BEGIN
    UPDATE_PRIMARY_KEY(mld_oorzaak_key,mld_s_mld_oorzaak_key);
    UPDATE_UPPER(mld_oorzaak_omschrijving,mld_oorzaak_upper,mld_oorzaak);
END;
/

CREATE_TRIGGER(mld_t_mld_meldbron_B_IU)
BEFORE INSERT OR UPDATE ON mld_meldbron
FOR EACH ROW
BEGIN
    UPDATE_PRIMARY_KEY(mld_meldbron_key,mld_s_mld_meldbron_key);
    UPDATE_UPPER(mld_meldbron_omschrijving,mld_meldbron_upper,mld_meldbron);
END;
/

CREATE_TRIGGER(mld_t_mld_standaardopdr_B_IU)
BEFORE INSERT OR UPDATE ON mld_standaardopdr
FOR EACH ROW
BEGIN
    UPDATE_PRIMARY_KEY(mld_standaardopdr_key,mld_s_mld_standaardopdr_key);
    UPDATE_UPPER(mld_standaardopdr_afk,mld_standaardopdr_afk_upper,mld_standaardopdr);
END;
/

AUDIT_BEGIN(mld_stdmelding)
AUDIT_VALUE(mld_stdmelding, mld_stdmelding_malusbasis)
AUDIT_VALUE(mld_stdmelding, mld_stdmelding_malus)
AUDIT_VALUE(mld_stdmelding, mld_stdmelding_malusmax)
AUDIT_VALUE(mld_stdmelding, mld_stdmelding_verwijder)
AUDIT_END()

CREATE_TRIGGER(mld_t_mld_stdmelding_B_IU)
BEFORE INSERT OR UPDATE ON mld_stdmelding
FOR EACH ROW
BEGIN
    UPDATE_PRIMARY_KEY(mld_stdmelding_key,mld_s_mld_stdmelding_key);
    UPDATE_UPPER(mld_stdmelding_omschrijving,mld_stdmelding_upper,mld_stdmelding);
    UPDATE_UPPER(mld_stdmelding_code,mld_stdmelding_code,mld_stdmelding);
    IF :new.mld_stdmelding_planbaar = 1 THEN :new.mld_stdmelding_planbaarfe := 1; END IF;
    IF :new.mld_stdmelding_planbaar = 2 THEN :new.mld_stdmelding_planbaarfe := 0; END IF;
    IF :new.mld_ins_discipline_key <> :old.mld_ins_discipline_key
    THEN
        -- is omhangen, dus afhankelijken laten volgen
        IF (fac.getSetting('mld_opdr_discipline_mode') = 1)
        THEN
            -- Opdrachten
            UPDATE mld_opdr
               SET mld_opdr_discipline_key = :new.mld_ins_discipline_key
             WHERE mld_melding_key IN
                       (SELECT mld_melding_key
                          FROM mld_melding
                         WHERE mld_stdmelding_key = :new.mld_stdmelding_key);
        END IF;

        -- Kennisbankitems
        UPDATE mld_stdmeldingfaq
           SET ins_discipline_key = :new.mld_ins_discipline_key
         WHERE mld_stdmelding_key = :new.mld_stdmelding_key;
    END IF;
    IF :new.mld_stdmelding_verwijder IS NOT NULL AND :old.mld_stdmelding_verwijder IS NULL
    THEN
        DELETE FROM mld_afmeldtekst
              WHERE mld_stdmelding_key = :new.mld_stdmelding_key;
    END IF;
END;
/

CREATE_TRIGGER(mld_t_mld_stdm_srtinst_B_IU)
BEFORE INSERT OR UPDATE ON mld_stdmelding_srtinst
FOR EACH ROW
BEGIN
  UPDATE_PRIMARY_KEY(mld_stdmelding_srtinst_key, mld_s_mld_stdm_srtinst_key);
END;
/

CREATE_TRIGGER(mld_t_mld_stdmeldinggroep_B_IU)
BEFORE INSERT OR UPDATE ON mld_stdmeldinggroep
FOR EACH ROW
BEGIN
  UPDATE_PRIMARY_KEY(mld_stdmeldinggroep_key, mld_s_mld_stdmeldinggroep_key);
END;
/

AUDIT_BEGIN(mld_typeopdr)
AUDIT_VALUE(mld_typeopdr, mld_typeopdr_gvs)
AUDIT_VALUE(mld_typeopdr, mld_typeopdr_fvs)
AUDIT_VALUE(mld_typeopdr, mld_typeopdr_kosten)
AUDIT_VALUE(mld_typeopdr, mld_typeopdr_factuur)
AUDIT_END()

CREATE_TRIGGER(mld_t_mld_typeopdr_B_IU)
BEFORE INSERT OR UPDATE ON mld_typeopdr
FOR EACH ROW
BEGIN
    UPDATE_PRIMARY_KEY(mld_typeopdr_key,mld_s_mld_stdmelding_key);
    UPDATE_UPPER(mld_typeopdr_omschrijving,mld_typeopdr_upper,mld_typeopdr);
    UPDATE_UPPER(mld_typeopdr_code,mld_typeopdr_code,mld_typeopdr);
END;
/

CREATE_TRIGGER(mld_t_mld_typeopdr_srtdi_B_IU)
BEFORE INSERT OR UPDATE ON mld_typeopdr_srtdiscipline
FOR EACH ROW
BEGIN
    UPDATE_PRIMARY_KEY(mld_typeopdr_srtdisc_key,mld_s_mld_typeopdr_srtdisc);
END;
/

CREATE_TRIGGER(mld_t_mld_melding_B_I)
BEFORE INSERT ON mld_melding
FOR EACH ROW
BEGIN
    UPDATE_PRIMARY_KEY(mld_melding_key, mld_s_mld_melding_key);
END;
/

CREATE_TRIGGER(mld_t_mld_melding_B_IU)
BEFORE INSERT OR UPDATE ON mld_melding
FOR EACH ROW
BEGIN
    IF sys_context('USERENV', 'ACTION') = 'ANONYMIZE' OR
       sys_context('USERENV', 'ACTION') = 'DBUPGRADE' THEN
      RETURN;
    END IF;

    -- Laat de opdrachten van doorgestuurde meldingen in vakgroep volgen
    IF (fac.getSetting('mld_opdr_discipline_mode') = 1 AND
        :old.mld_stdmelding_key <> :new.mld_stdmelding_key AND
        :new.mld_melding_status IN (4, 5, 6, 7))
    THEN
        -- Opdrachten
        UPDATE mld_opdr
           SET mld_opdr_discipline_key =
               (SELECT mld_ins_discipline_key
                  FROM mld_stdmelding
                 WHERE mld_stdmelding_key = :new.mld_stdmelding_key)
         WHERE mld_opdr_discipline_key <>
               (SELECT mld_ins_discipline_key
                  FROM mld_stdmelding
                 WHERE mld_stdmelding_key = :new.mld_stdmelding_key) -- Alleen als ook daadwerkelijk veranderd
           AND mld_melding_key = :new.mld_melding_key;
    END IF;

    -- Vul het dan redundante veld MLD_ALG_LOCATIE_KEY als de onroerendgoed_key gedefinieerd is,
    -- zo niet, dan krijgt mld_alg_locatie_key gewoon de waarde die wordt meegegeven (of die het had)
    IF :new.mld_alg_onroerendgoed_keys IS NOT NULL
        AND (:old.mld_alg_onroerendgoed_keys IS NULL
           OR :old.mld_alg_onroerendgoed_keys <> :new.mld_alg_onroerendgoed_keys)
    THEN
      CHECK_REFERENCE_ONROERENDGOED(mld_alg_onroerendgoed_keys, 'alg_m090');  /* wordt m.i. geimpliceerd door het volgende */
      SELECT alg_locatie_key
        INTO :NEW.mld_alg_locatie_key
        FROM mld_v_onroerendgoed_locatie
       WHERE alg_onroerendgoed_keys = :NEW.mld_alg_onroerendgoed_keys;
    END IF;

    IF :old.mld_melding_conceptstatus IS NULL
    THEN
        SELECT mld_stdmelding_conceptstatus
          INTO :new.mld_melding_conceptstatus
          FROM mld_stdmelding
         WHERE mld_stdmelding_key = :new.mld_stdmelding_key;
    END IF;

    -- Remember/update the default SLA-data if new or possibly changed
    IF    :new.mld_melding_acceptdatum_std IS NULL
       OR UPDATING ('mld_melding_datum')
       OR UPDATING ('mld_stdmelding_key')
       OR UPDATING ('mld_melding_spoed')
    THEN
        :new.mld_melding_acceptdatum_std :=
            mld.getacceptdatum (:new.mld_melding_datum, :new.mld_stdmelding_key, :new.mld_alg_onroerendgoed_keys, :new.mld_melding_spoed);
    END IF;

    -- Als prs_perslid_key_voor geen waarde heeft dan gelijk aan prs_perslid_key.
    -- en afhankelijk van de setting ook gelijkhouden.
    IF :new.prs_perslid_key_voor IS NULL
       OR (:new.prs_perslid_key <> :old.prs_perslid_key
           AND fac.getSetting('mld_allow_for_others') < 1)
    THEN
      :new.prs_perslid_key_voor := :new.prs_perslid_key;
    END IF;

    DECLARE
        l_planbaar             mld_stdmelding.mld_stdmelding_planbaar%TYPE;
        l_default_t_accepttijd mld_stdmelding.mld_stdmelding_t_accepttijd%TYPE;
    BEGIN
        IF :new.mld_melding_einddatum_std IS NULL
           OR UPDATING ('mld_melding_datum')
           OR UPDATING ('mld_stdmelding_key')
           OR UPDATING ('mld_melding_spoed')
           OR UPDATING ('mld_alg_onroerendgoed_keys')
        THEN
            :new.mld_melding_einddatum_std :=
                mld.geteinddatum (:new.mld_melding_datum,
                                  :new.mld_stdmelding_key,
                                  :new.mld_melding_spoed,
                                  :new.mld_alg_onroerendgoed_keys,
                                  mld.getlowestobjectuitvoer(:new.mld_melding_key)); -- Ik weet bij nieuwe meldingen nog niet welke objecten aan de meldingen zijn gekoppeld. Dan is de waarde null.

            -- Jammer dat ik dat zelf nog een keer moet ophalen, maar ja
            -- Deze waarden bewaren, want is iha niet terug te berekenen
            SELECT mld.getstduitvoer(:new.mld_stdmelding_key,
                                     :new.mld_melding_spoed,
                                     :new.mld_alg_onroerendgoed_keys,
                                     mld.getlowestobjectuitvoer(:new.mld_melding_key)),
                    DECODE (:new.mld_melding_spoed,
                      1, mld_stdmelding_t_accept_pr1,
                      2, mld_stdmelding_t_accept_pr2,
                      3, mld_stdmelding_t_accepttijd,
                      4, mld_stdmelding_t_accept_pr4,
                      mld_stdmelding_t_accepttijd),
                      mld_stdmelding_t_accepttijd,
                   mld_stdmelding_planbaar
              INTO :new.mld_melding_t_uitvoertijd,
                   :new.mld_melding_t_accepttijd,
                   l_default_t_accepttijd,
                   l_planbaar
              FROM mld_stdmelding msm
             WHERE msm.mld_stdmelding_key = :new.mld_stdmelding_key;
            IF :new.mld_melding_t_accepttijd.tijdsduur IS NULL
            THEN
                :new.mld_melding_t_accepttijd := l_default_t_accepttijd;
            END IF;
            -- Alleen aanpassen aan de SLA indien niet meegegeven en mogelijk gewijzigd (!)
            IF (UPDATING AND NOT UPDATING('mld_melding_einddatum')
                AND (:old.mld_melding_einddatum_std IS NULL
                     OR :old.mld_melding_einddatum_std <> :new.mld_melding_einddatum_std)
                AND l_planbaar = 1)
               OR (INSERTING AND :new.mld_melding_einddatum IS NULL)
            THEN
                :new.mld_melding_einddatum := :new.mld_melding_einddatum_std;
            END IF;
        END IF;
    END;

    IF :new.prs_perslid_key IS NULL
    THEN
       raise_application_error(-20000, 'mld_m233');
    END IF;
  -- Verwerken
   IF :new.mld_melding_status = 6 AND :old.mld_melding_status <> 6
   THEN
      -- De melding wordt nu verwerkt
      IF :old.mld_melding_status <> 5
      THEN
         -- wat alleen mag als de status afgemeld(5) was
         raise_application_error(-20000, 'mld_m203');
      END IF;
   END IF;

   -- Melding is/wordt In Behandeling
   IF :new.mld_melding_status = 4 OR :new.mld_melding_status = 7
   THEN
      -- controleer hier de status van de bijbehorende opdrachten
      -- updates mogen de status wel op 4 of 7 zetten, maar wij bepalen HIER welke het daarvan wordt.
      -- NB: als je consequent mld.updatemeldingstatus() zou aanroepen zou dit niet hoeven
      DECLARE
         actieveopdrachten   NUMBER;
      BEGIN
         SELECT   COUNT(*)
           INTO   actieveopdrachten
           FROM   mld_opdr o
          WHERE   o.mld_melding_key = :new.mld_melding_key
            AND   mld_statusopdr_key  NOT IN (1, 2, 6, 7, 9);

         IF actieveopdrachten > 0
         THEN
            -- Open orders: status = in progress
            :new.mld_melding_status := 7;
         ELSE
            -- Only closed orders: status = Accepted again
            :new.mld_melding_status := 4;
         END IF;
      END;
   END IF;

   -- Beoordeling van de melding
   IF     (:new.mld_melding_satisfaction IS NOT NULL
      AND (:old.mld_melding_satisfaction IS NULL OR :old.mld_melding_satisfaction <> :new.mld_melding_satisfaction))
   THEN
      fac.trackaction('#MLDLIK', :old.mld_melding_key, NULL , SYSDATE, REPLACE(lcl.l('lcl_faclike_changed'), '{0}', :new.mld_melding_satisfaction));
   END IF;
END;
/

CREATE_TRIGGER(mld_t_mld_opdr_B_I)
BEFORE INSERT ON mld_opdr
FOR EACH ROW
BEGIN
    UPDATE_PRIMARY_KEY(mld_opdr_key, mld_s_mld_opdr_key);

    /* Controleer of de opdracht bij een melding hoort die de goede status heeft,
     * Het voorkomt dat er onverwachts opdrachten zijn op Afgewezen of nog niet Geaccepteerde meldingen
     * namelijk: GEACCEPTEERD, UITGEGEVEN of AFGEMELD
     * Sinds FSN#30228 hoort daar zelfs ook VERWERKT bij
     * Zo niet, dan mag het alleen als de contract_key is ingevuld
     */
    IF :new.mld_melding_key IS NOT NULL
    THEN
        DECLARE
            dummy   CHAR;
        BEGIN
            SELECT 'X'
              INTO dummy
              FROM mld_melding
             WHERE mld_melding_key = :NEW.mld_melding_key
               AND mld_melding_status IN (4, 5, 6, 7);
        EXCEPTION
            WHEN NO_DATA_FOUND
            THEN
                IF :NEW.cnt_contract_key IS NULL
                THEN
                    raise_application_error (-20000, 'mld_m201');
                END IF;
        END;
    END IF;

    BEGIN
        IF fac.getSetting ('mld_opdr_discipline_mode') = 1
        THEN -- altijd vakgroep discipline
            SELECT msm.mld_ins_discipline_key
              INTO :NEW.mld_opdr_discipline_key
              FROM mld_melding m, mld_stdmelding msm
             WHERE m.mld_melding_key = :NEW.mld_melding_key
               AND msm.mld_stdmelding_key = m.mld_stdmelding_key;
        ELSE -- voorkeur voor behandelteam discipline
            SELECT COALESCE(m.mld_ins_discipline_key, msm.mld_ins_discipline_key)
              INTO :NEW.mld_opdr_discipline_key
              FROM mld_melding m, mld_stdmelding msm
             WHERE m.mld_melding_key = :NEW.mld_melding_key
               AND msm.mld_stdmelding_key = m.mld_stdmelding_key;
        END IF;
      EXCEPTION
         WHEN NO_DATA_FOUND
         THEN
            NULL; /* TWYN heeft geen meldingen boven de opdracht */
      END;
END;
/

CREATE_TRIGGER(mld_t_mld_opdr_B_IU)
BEFORE INSERT OR UPDATE ON mld_opdr
FOR EACH ROW
BEGIN
    IF sys_context('USERENV', 'ACTION') = 'ANONYMIZE' OR
       sys_context('USERENV', 'ACTION') = 'DBUPGRADE' THEN
      RETURN;
    END IF;

    CHECK_REFERENCE_UITVOERENDE (mld_uitvoerende_keys, 'mld_m37');
    -- gooi fiatverzoeknotificaties weg als gefiatteerd of afgewezen-> opnemen in bovenste deel
    IF :OLD.mld_statusopdr_key = 3 AND :new.mld_statusopdr_key IN (4, 2)
    THEN
        fac.clrnotifications ('MLDAP1', :new.mld_opdr_key);
    END IF;

    // Nog tijdelijk backwards compatible met cust-code die mld_opdr_teverzenden op 2 zet
    IF :OLD.mld_opdr_teverzenden = 2 AND :OLD.mld_opdr_verzonden IS NULL
    THEN
        NULL; -- stond hij al in de queue
    ELSIF :NEW.mld_opdr_teverzenden = 2 AND :NEW.mld_opdr_verzonden IS NULL
    THEN -- Zou hij vroeger in de fac_v_orderqueue herverschijnen
        -- ORDSND tracking/notificatie
        --mld.notifyopdrbedrijven (:new.mld_opdr_key, ptrackingkey => NULL); geeft trigger mutating
        FOR bedrijfrec
        IN (SELECT b.prs_bedrijf_key,
                    COALESCE (l1.alg_locatie_key, l2.alg_locatie_key)                           alg_locatie_key,
                    COALESCE (l1.alg_locatie_email, l2.alg_locatie_email)                       alg_locatie_email,
                    :NEW.mld_melding_key || '/' || :NEW.mld_opdr_bedrijfopdr_volgnr                   reference,
                    d.prs_bedrijf_key                                                           persoon_bedrijf_key, -- van de melder, niet de uitvoerende
                    fac_srtnotificatie_key
              FROM mld_melding     m,
                    mld_adres       ma,
                    alg_locatie     l1,
                    alg_locatie     l2,
                    prs_perslid     p,
                    prs_v_afdeling  d,
                    prs_bedrijf     b,
                    fac_srtnotificatie fsn
              WHERE     b.prs_bedrijf_key = :NEW.mld_uitvoerende_keys
                    AND :NEW.mld_melding_key = m.mld_melding_key
                    AND m.mld_adres_key = ma.mld_adres_key(+)
                    AND ma.alg_locatie_key = l1.alg_locatie_key(+)
                    AND m.mld_alg_locatie_key = l2.alg_locatie_key(+)
                    AND d.prs_afdeling_key = p.prs_afdeling_key
                    AND p.prs_perslid_key = m.prs_perslid_key
                    AND fac_srtnotificatie_code = 'ORDSND') -- hardcoded ORDSND, het gaat uiteindelijk vooral om de XMLnode 'opdracht' in putorders
        LOOP
            fac.notifybedrijf (pbedrijf_key          => bedrijfrec.prs_bedrijf_key,
                                pbedrijfadres_type    => 'O',
                                prefkey               => :NEW.mld_opdr_key,
                                ptrackingkey          => NULL,
                                psrtnoti_key          => bedrijfrec.fac_srtnotificatie_key,
                                preference            => bedrijfrec.reference,
                                ptypeopdr_key         => :NEW.mld_typeopdr_key,
                                plocatie_key          => bedrijfrec.alg_locatie_key,
                                pdiscipline_key       => :NEW.mld_opdr_discipline_key,
                                pbedrijf_key2         => bedrijfrec.persoon_bedrijf_key,
                                psender               => bedrijfrec.alg_locatie_email);
        END LOOP;
    END IF;
END;
/

CREATE_TRIGGER(mld_t_mld_adres_B_IU)
BEFORE INSERT OR UPDATE ON mld_adres
FOR EACH ROW
BEGIN
    UPDATE_PRIMARY_KEY(mld_adres_key, mld_s_mld_adres_key);
    UPDATE_UPPER(mld_adres_naam, mld_adres_upper,mld_adres);
END;
/

CREATE_TRIGGER(mld_t_mld_vrije_dagen_b_iu)
BEFORE INSERT OR UPDATE ON mld_vrije_dagen
FOR EACH ROW
BEGIN
   UPDATE_PRIMARY_KEY(mld_vrije_dagen_key, mld_s_mld_vrije_dagen_key);
   /* Haal het tijdgedeelte van de ingevoerde datum af. */
   :new.mld_vrije_dagen_datum := TRUNC(:new.mld_vrije_dagen_datum);
END;
/

CREATE_TRIGGER(mld_t_mld_mld_object_B_IU)
BEFORE INSERT OR UPDATE ON mld_melding_object
FOR EACH ROW
BEGIN
    UPDATE_PRIMARY_KEY(mld_melding_object_key, mld_s_mld_object_key);
END;
/

CREATE_TRIGGER(mld_t_mld_srtkenmerk_b_iu)
BEFORE INSERT OR UPDATE ON mld_srtkenmerk
FOR EACH ROW
BEGIN
  UPDATE_PRIMARY_KEY(mld_srtkenmerk_key, mld_s_mld_srtkenmerk_key);
  UPDATE_UPPER(mld_srtkenmerk_omschrijving, mld_srtkenmerk_upper,mld_srtkenmerk);
  UPDATE_UPPER(mld_srtkenmerk_code, mld_srtkenmerk_code, mld_srtkenmerk);
  UPDATE_AANMAAKDATUM(mld_srtkenmerk, mld_srtkenmerk_aanmaak);
  IF (:new.mld_srtkenmerk_verwijder IS NOT NULL AND :old.mld_srtkenmerk_verwijder IS NULL AND
    BITAND(:new.mld_srtkenmerk_systeem, 1) = 1)
  THEN
    raise_application_error(-20000, 'MLD_C_MLD_SRTKENMERK_SYSTEEM');
  END IF;
  --
  IF :new.mld_srtkenmerk_kenmerktype IN ('C', 'N') AND :new.mld_srtkenmerk_lengte IS NULL
  THEN
    raise_application_error(-20000, 'MLD_C_MLD_SRTKENMERK_LENGTE');
  END IF;
  IF :new.mld_srtkenmerk_kenmerktype = 'N' AND :new.mld_srtkenmerk_lengte > 20
  THEN
     :new.mld_srtkenmerk_lengte := 20;
  END IF;
  --
  IF  :new.mld_srtkenmerk_kenmerktype = 'N' AND :old.mld_srtkenmerk_key IS NOT NULL
  THEN
    IF :old.mld_srtkenmerk_nmin <> :new.mld_srtkenmerk_nmin
    OR (:old.mld_srtkenmerk_nmin IS NULL AND :new.mld_srtkenmerk_nmin IS NOT NULL)
    THEN
      DECLARE
        Dummy CHAR;
      BEGIN
        SELECT 'X'
        INTO   Dummy
        FROM   mld_kenmerkmelding
        WHERE  FAC.SAFE_TO_NUMBER(mld_kenmerkmelding_waarde) < :new.mld_srtkenmerk_nmin
        AND    mld_kenmerk_key IN
              (SELECT mld_kenmerk_key
               FROM   mld_kenmerk
               WHERE  mld_srtkenmerk_key = :old.mld_srtkenmerk_key
              );
        raise_application_error(-20000, 'MLD_C_MLD_SRTKENMERK_MIN');
      EXCEPTION
        WHEN NO_DATA_FOUND
          THEN NULL;
        WHEN TOO_MANY_ROWS
          THEN raise_application_error(-20000, 'MLD_C_MLD_SRTKENMERK_MIN');
      END;
    END IF;
    --
    IF :old.mld_srtkenmerk_nmax <> :new.mld_srtkenmerk_nmax
    OR (:old.mld_srtkenmerk_nmax IS NULL AND :new.mld_srtkenmerk_nmax IS NOT NULL)
    THEN
      DECLARE
        Dummy CHAR;
      BEGIN
        SELECT 'X'
        INTO   Dummy
        FROM   mld_kenmerkmelding
        WHERE  FAC.SAFE_TO_NUMBER(mld_kenmerkmelding_waarde) > :new.mld_srtkenmerk_nmax
        AND    mld_kenmerk_key IN
              (SELECT mld_kenmerk_key
               FROM   mld_kenmerk
               WHERE  mld_srtkenmerk_key = :old.mld_srtkenmerk_key
              );
        raise_application_error(-20000, 'MLD_C_MLD_SRTKENMERK_MAX');
      EXCEPTION
        WHEN NO_DATA_FOUND
          THEN NULL;
        WHEN TOO_MANY_ROWS
          THEN raise_application_error(-20000, 'MLD_C_MLD_SRTKENMERK_MAX');
      END;
    END IF;
  END IF;
END;
/

CREATE_TRIGGER(mld_t_mld_kenmerk_b_iu)
BEFORE INSERT OR UPDATE ON mld_kenmerk
FOR EACH ROW
BEGIN
   -- FSN#13902: we tolereren het achteraf verplicht maken
  UPDATE_PRIMARY_KEY(mld_kenmerk_key, mld_s_mld_kenmerk_key);
  UPDATE_UPPER(mld_kenmerk_code, mld_kenmerk_code, mld_kenmerk);
  UPDATE_AANMAAKDATUM(mld_kenmerk, mld_kenmerk_aanmaak);
END;
/

CREATE_TRIGGER(mld_t_mld_kenmerkmelding_b_i)
BEFORE INSERT ON mld_kenmerkmelding
FOR EACH ROW
BEGIN
    UPDATE_PRIMARY_KEY(mld_kenmerkmelding_key, mld_s_mld_kenmerkmelding_key);
END;
/

CREATE_TRIGGER(mld_t_mld_kenmerkmelding_b_iu)
BEFORE INSERT OR UPDATE ON mld_kenmerkmelding
FOR EACH ROW
BEGIN
  -- Controleer eerst of de ingevulde waarde goed is.
  --
  IF :new.mld_kenmerkmelding_waarde <> :old.mld_kenmerkmelding_waarde
  OR :old.mld_kenmerkmelding_waarde IS NULL
  OR :new.mld_kenmerkmelding_waarde IS NULL
  THEN
    DECLARE
      SrtKenmerkOmschr      mld_srtkenmerk.mld_srtkenmerk_omschrijving%TYPE;
      SrtKenmerkType        mld_srtkenmerk.mld_srtkenmerk_kenmerktype%TYPE;
      SrtKenmerkLengte      mld_srtkenmerk.mld_srtkenmerk_lengte%TYPE;
      SrtKenmerkDec         mld_srtkenmerk.mld_srtkenmerk_dec%TYPE;
      SrtKenmerkNMin        mld_srtkenmerk.mld_srtkenmerk_nmin%TYPE;
      SrtKenmerkNMax        mld_srtkenmerk.mld_srtkenmerk_nmax%TYPE;
      KenmerkVerplicht      mld_kenmerk.mld_kenmerk_verplicht%TYPE;
      NumberWaarde          NUMBER(25,5);
      FormatMask            VARCHAR2(60);
      KenmerkMeldingWaarde  mld_kenmerkmelding.mld_kenmerkmelding_waarde%TYPE;
    BEGIN
      KenmerkMeldingWaarde := :new.mld_kenmerkmelding_waarde;
      --
      SELECT COALESCE(MLD_K.mld_kenmerk_omschrijving, MLD_SK.mld_srtkenmerk_omschrijving)
      ,      MLD_SK.mld_srtkenmerk_kenmerktype
      ,      MLD_SK.mld_srtkenmerk_lengte
      ,      MLD_SK.mld_srtkenmerk_dec
      ,      MLD_SK.mld_srtkenmerk_nmin
      ,      MLD_SK.mld_srtkenmerk_nmax
      ,      MLD_K.mld_kenmerk_verplicht
      INTO   SrtKenmerkOmschr
      ,      SrtKenmerkType
      ,      SrtKenmerkLengte
      ,      SrtKenmerkDec
      ,      SrtKenmerkNMin
      ,      SrtKenmerkNMax
      ,      KenmerkVerplicht
      FROM   mld_srtkenmerk MLD_SK
      ,      mld_kenmerk    MLD_K
      WHERE  MLD_SK.mld_srtkenmerk_key = MLD_K.mld_srtkenmerk_key
      AND    MLD_K.mld_kenmerk_key     = :new.mld_kenmerk_key;
      --
      -- Controleer eerst of het verplichte veld ingevuld is.
      --
      IF KenmerkVerplicht IS NOT NULL AND KenmerkMeldingWaarde IS NULL
      THEN
        APPLICATION_ERROR_GOTO(-20004, 'mld_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(KenmerkMeldingWaarde) > SrtKenmerkLengte
        THEN
          APPLICATION_ERROR_GOTO(-20004, 'mld_m241,'||SrtKenmerkOmschr||','||TO_CHAR(SrtKenmerkLengte));
        END IF;
      ELSIF SrtKenmerkType = 'N'
      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(KenmerkMeldingWaarde);
        EXCEPTION
          WHEN OTHERS
          THEN FormatMask := REPLACE(FormatMask, '9', '#');
               FormatMask := REPLACE(FormatMask, '0', '#');
               FormatMask := REPLACE(FormatMask, 'D', '.');
               APPLICATION_ERROR_GOTO(-20004, 'mld_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, 'mld_m243,'||SrtKenmerkOmschr||','||
                                                TO_CHAR(SrtKenmerkNMin)||','||
                                                TO_CHAR(SrtKenmerkNMax));
        ELSE
          --  Controleer of de waarde aan het formaat voldoet.
          KenmerkMeldingWaarde := LTRIM(NUMBER_TO_CHAR(NumberWaarde, FormatMask));
          IF INSTR2(KenmerkMeldingWaarde, '#') <> 0
          THEN
            FormatMask := REPLACE(FormatMask, '9', '#');
            FormatMask := REPLACE(FormatMask, '0', '#');
            FormatMask := REPLACE(FormatMask, 'D', '.');
            APPLICATION_ERROR_GOTO(-20004,'mld_m242,'||SrtKenmerkOmschr||','||FormatMask);
          END IF;
        END IF;
        -- Zet de geconverteerde waarde terug.
        :new.mld_kenmerkmelding_waarde := KenmerkMeldingWaarde;
      ELSIF SrtKenmerkType = 'D'
      THEN
        -- DATUM
        KenmerkMeldingWaarde := DATE_TO_CHAR(_TO_DATE2(KenmerkMeldingWaarde,'DD-MM-YY'),'DD-MM-YYYY');
        -- Zet de geconverteerde waarde terug.
        :new.mld_kenmerkmelding_waarde := KenmerkMeldingWaarde;
      END IF;
    END;
  END IF;
END;
/

CREATE_TRIGGER(mld_t_mld_kenmerkblokmelding_b_i)
BEFORE INSERT ON mld_kenmerkblokmelding
FOR EACH ROW
BEGIN
    UPDATE_PRIMARY_KEY(mld_kenmerkblokmelding_key, mld_s_mld_kenmerkblokmelding_key);
END;
/

CREATE_TRIGGER(mld_t_mld_kenmerkopdr_b_i)
BEFORE INSERT ON mld_kenmerkopdr
FOR EACH ROW
BEGIN
    UPDATE_PRIMARY_KEY(mld_kenmerkopdr_key, mld_s_mld_kenmerkopdr_key);
END;
/

CREATE_TRIGGER(mld_t_mld_kenmerkopdr_b_iu)
BEFORE INSERT OR UPDATE ON mld_kenmerkopdr
FOR EACH ROW
BEGIN
  -- Controleer eerst of de ingevulde waarde goed is.
  --
  IF :new.mld_kenmerkopdr_waarde <> :old.mld_kenmerkopdr_waarde
  OR :old.mld_kenmerkopdr_waarde IS NULL
  OR :new.mld_kenmerkopdr_waarde IS NULL
  THEN
    DECLARE
      SrtKenmerkOmschr      mld_srtkenmerk.mld_srtkenmerk_omschrijving%TYPE;
      SrtKenmerkType        mld_srtkenmerk.mld_srtkenmerk_kenmerktype%TYPE;
      SrtKenmerkLengte      mld_srtkenmerk.mld_srtkenmerk_lengte%TYPE;
      SrtKenmerkDec         mld_srtkenmerk.mld_srtkenmerk_dec%TYPE;
      SrtKenmerkNMin        mld_srtkenmerk.mld_srtkenmerk_nmin%TYPE;
      SrtKenmerkNMax        mld_srtkenmerk.mld_srtkenmerk_nmax%TYPE;
      KenmerkVerplicht      mld_kenmerk.mld_kenmerk_verplicht%TYPE;
      NumberWaarde          NUMBER(25,5);
      FormatMask            VARCHAR2(60);
      KenmerkOpdrWaarde     mld_kenmerkopdr.mld_kenmerkopdr_waarde%TYPE;
    BEGIN
      KenmerkOpdrWaarde := :new.mld_kenmerkopdr_waarde;
      --
      SELECT COALESCE(MLD_K.mld_kenmerk_omschrijving, MLD_SK.mld_srtkenmerk_omschrijving)
      ,      MLD_SK.mld_srtkenmerk_kenmerktype
      ,      MLD_SK.mld_srtkenmerk_lengte
      ,      MLD_SK.mld_srtkenmerk_dec
      ,      MLD_SK.mld_srtkenmerk_nmin
      ,      MLD_SK.mld_srtkenmerk_nmax
      ,      MLD_K.mld_kenmerk_verplicht
      INTO   SrtKenmerkOmschr
      ,      SrtKenmerkType
      ,      SrtKenmerkLengte
      ,      SrtKenmerkDec
      ,      SrtKenmerkNMin
      ,      SrtKenmerkNMax
      ,      KenmerkVerplicht
      FROM   mld_srtkenmerk MLD_SK
      ,      mld_kenmerk    MLD_K
      WHERE  MLD_SK.mld_srtkenmerk_key = MLD_K.mld_srtkenmerk_key
      AND    MLD_K.mld_kenmerk_key     = :new.mld_kenmerk_key;
      --
      -- Controleer eerst of het verplichte veld ingevuld is.
      --
      IF KenmerkVerplicht IS NOT NULL AND KenmerkOpdrWaarde IS NULL
      THEN
        APPLICATION_ERROR_GOTO(-20004, 'mld_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(KenmerkOpdrWaarde) > SrtKenmerkLengte
        THEN
          APPLICATION_ERROR_GOTO(-20004, 'mld_m241,'||SrtKenmerkOmschr||','||TO_CHAR(SrtKenmerkLengte));
        END IF;
      ELSIF SrtKenmerkType = 'N'
      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(KenmerkOpdrWaarde);
        EXCEPTION
          WHEN OTHERS
          THEN FormatMask := REPLACE(FormatMask, '9', '#');
               FormatMask := REPLACE(FormatMask, '0', '#');
               FormatMask := REPLACE(FormatMask, 'D', '.');
               APPLICATION_ERROR_GOTO(-20004, 'mld_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, 'mld_m243,'||SrtKenmerkOmschr||','||
                                                TO_CHAR(SrtKenmerkNMin)||','||
                                                TO_CHAR(SrtKenmerkNMax));
        ELSE
          --  Controleer of de waarde aan het formaat voldoet.
          KenmerkOpdrWaarde := LTRIM(NUMBER_TO_CHAR(NumberWaarde, FormatMask));
          IF INSTR2(KenmerkOpdrWaarde, '#') <> 0
          THEN
            FormatMask := REPLACE(FormatMask, '9', '#');
            FormatMask := REPLACE(FormatMask, '0', '#');
            FormatMask := REPLACE(FormatMask, 'D', '.');
            APPLICATION_ERROR_GOTO(-20004,'mld_m242,'||SrtKenmerkOmschr||','||FormatMask);
          END IF;
        END IF;
        -- Zet de geconverteerde waarde terug.
        :new.mld_kenmerkopdr_waarde := KenmerkOpdrWaarde;
      ELSIF SrtKenmerkType = 'D'
      THEN
        -- DATUM
        KenmerkOpdrWaarde := DATE_TO_CHAR(_TO_DATE2(KenmerkOpdrWaarde,'DD-MM-YY'),'DD-MM-YYYY');
        -- Zet de geconverteerde waarde terug.
        :new.mld_kenmerkopdr_waarde := KenmerkOpdrWaarde;
      END IF;
    END;
  END IF;
END;
/

/* Workflow triggers */
CREATE_TRIGGER(mld_t_mld_workflowstep_B_IU)
BEFORE INSERT OR UPDATE ON mld_workflowstep
FOR EACH ROW
BEGIN
    UPDATE_PRIMARY_KEY(mld_workflowstep_key,mld_s_mld_workflowstep_key);
END;
/
CREATE_TRIGGER(mld_t_mld_workflowstep_B_D)
BEFORE DELETE ON mld_workflowstep
FOR EACH ROW
BEGIN
    UPDATE mld_melding SET mld_workflowstep_key = NULL where mld_workflowstep_key = :old.mld_workflowstep_key;
END;
/

CREATE_TRIGGER(mld_t_mld_workflowrule_B_IU)
BEFORE INSERT OR UPDATE ON mld_workflowrule
FOR EACH ROW
BEGIN
    UPDATE_PRIMARY_KEY(mld_workflowrule_key,mld_s_mld_workflowrule_key);
END;
/

CREATE_TRIGGER(mld_t_mld_deelwerk_b_iu)
BEFORE INSERT OR UPDATE ON mld_deelwerk
FOR EACH ROW
BEGIN
   UPDATE_PRIMARY_KEY(mld_deelwerk_key, mld_s_mld_deelwerk_key);
END;
/
CREATE_TRIGGER(mld_t_mld_deelwerkmat_b_iu)
BEFORE INSERT OR UPDATE ON mld_deelwerkmateriaal
FOR EACH ROW
BEGIN
   UPDATE_PRIMARY_KEY(mld_deelwerkmateriaal_key, mld_s_mld_deelwerkmat_key);
END;
/

CREATE_TRIGGER(mld_t_mld_melding_note_b_iu)
BEFORE INSERT OR UPDATE ON mld_melding_note
FOR EACH ROW
BEGIN
  UPDATE_PRIMARY_KEY(mld_melding_note_key, mld_s_mld_melding_note_key);
END;
/

CREATE OR REPLACE TRIGGER mld_t_mld_melding_note_b_u
BEFORE INSERT OR UPDATE ON mld_melding_note
FOR EACH ROW
BEGIN
    IF :new.mld_melding_note_omschrijving <> :old.mld_melding_note_omschrijving  OR :old.mld_melding_note_omschrijving IS NULL
    THEN
      :new.mld_melding_note_wijzigdatum := SYSDATE;
    END IF;
END;
/

CREATE OR REPLACE TRIGGER mld_t_mld_opdr_note_B_U
BEFORE INSERT OR UPDATE ON mld_opdr_note
FOR EACH ROW
BEGIN
    IF :new.mld_opdr_note_omschrijving <> :old.mld_opdr_note_omschrijving OR :old.mld_opdr_note_omschrijving IS NULL
    THEN
        :new.mld_opdr_note_wijzigdatum := SYSDATE;
    END IF;
END;
/

CREATE_TRIGGER(mld_t_mld_opdr_note_b_iu)
BEFORE INSERT OR UPDATE ON mld_opdr_note
FOR EACH ROW
BEGIN
  UPDATE_PRIMARY_KEY(mld_opdr_note_key, mld_s_mld_opdr_note_key);
END;
/

CREATE_TRIGGER(mld_t_mld_opdr_uren_b_i)
BEFORE INSERT ON mld_opdr_uren
FOR EACH ROW
BEGIN
  UPDATE_PRIMARY_KEY(mld_opdr_uren_key, mld_s_mld_opdr_uren_key);
END;
/

CREATE_TRIGGER(mld_t_mld_opdr_uren_b_u)
BEFORE UPDATE ON mld_opdr_uren
FOR EACH ROW
BEGIN
    IF :new.mld_opdr_uren_besteed <> :old.mld_opdr_uren_besteed OR :old.mld_opdr_uren_besteed IS NULL
    THEN
        :new.mld_opdr_uren_wijzigdatum := SYSDATE;
    END IF;
END;
/

CREATE_TRIGGER(mld_t_mld_impropdr_b_iu)
BEFORE INSERT OR UPDATE ON mld_impropdr
FOR EACH ROW
BEGIN
  UPDATE_PRIMARY_KEY(mld_impropdr_key, mld_s_mld_impropdr_key);
END;
/


CREATE_TRIGGER(mld_t_mld_kosten_b_iu)
BEFORE INSERT OR UPDATE ON mld_kosten
FOR EACH ROW
BEGIN
  UPDATE_PRIMARY_KEY(mld_kosten_key, mld_s_mld_kosten_key);
END;
/

CREATE_TRIGGER(mld_t_mld_opdruren_kosten_b_iu)
BEFORE INSERT OR UPDATE ON mld_opdruren_kosten
FOR EACH ROW
BEGIN
  UPDATE_PRIMARY_KEY(mld_opdruren_kosten_key, mld_s_mld_opdruren_kosten_key);
END;
/

CREATE_TRIGGER(mld_t_mld_opdruren_dagk_b_iu)
BEFORE INSERT OR UPDATE ON mld_opdruren_dagkosten
FOR EACH ROW
BEGIN
  UPDATE_PRIMARY_KEY(mld_opdruren_dagkosten_key, mld_s_mld_opdruren_dagk_key);
END;
/

CREATE_TRIGGER(mld_t_dienstniveau_b_iu)
BEFORE INSERT OR UPDATE ON mld_dienstniveau
FOR EACH ROW
BEGIN
   UPDATE_PRIMARY_KEY(mld_dienstniveau_key, mld_s_dienstniveau_key);
END;
/

CREATE_TRIGGER(mld_t_dienstpakket_b_iu)
BEFORE INSERT OR UPDATE ON mld_dienstpakket
FOR EACH ROW
BEGIN
   UPDATE_PRIMARY_KEY(mld_dienstpakket_key, mld_s_dienstpakket_key);
END;
/

CREATE_TRIGGER(mld_t_mld_stdm_srtruimte_B_I)
BEFORE INSERT ON mld_stdmelding_srtruimte
FOR EACH ROW
BEGIN
   UPDATE_PRIMARY_KEY(mld_stdmelding_srtruimte_key, mld_s_mld_stdm_srtruimte_key);
END;
/

CREATE_TRIGGER(mld_t_mld_opdr_uitvoeren_B_IU)
BEFORE INSERT OR UPDATE ON mld_opdr_uitvoeren
FOR EACH ROW
BEGIN
    UPDATE_PRIMARY_KEY(mld_opdr_uitvoeren_key, mld_s_mld_opdr_uitvoeren_key);
END;
/

CREATE_TRIGGER(mld_t_mld_opdr_materiaal_B_I)
BEFORE INSERT ON mld_opdr_materiaal
FOR EACH ROW
BEGIN
    UPDATE_PRIMARY_KEY(mld_opdr_materiaal_key, mld_s_mld_opdr_materiaal_key);
END;
/

CREATE_TRIGGER(mld_t_mld_afmeldtekst_B_IU)
BEFORE INSERT OR UPDATE ON mld_afmeldtekst
FOR EACH ROW
BEGIN
    UPDATE_PRIMARY_KEY(mld_afmeldtekst_key, mld_s_mld_afmeldtekst_key);
END;
/

CREATE_TRIGGER(mld_t_mld_stdmeldingfaq_B_IU)
BEFORE INSERT OR UPDATE ON mld_stdmeldingfaq
FOR EACH ROW
BEGIN
    UPDATE_PRIMARY_KEY(mld_stdmeldingfaq_key, mld_s_mld_stdmeldingfaq_key);
END;
/

CREATE_TRIGGER(mld_t_mld_typeopdrfaq_B_I)
BEFORE INSERT ON mld_typeopdrfaq
FOR EACH ROW
BEGIN
    UPDATE_PRIMARY_KEY(mld_typeopdrfaq_key, mld_s_mld_typeopdrfaq_key);
END;
/

CREATE_TRIGGER(mld_t_mld_stdmsrtruimte_B_IU)
BEFORE INSERT OR UPDATE ON mld_stdmsrtruimte
FOR EACH ROW
BEGIN
    UPDATE_PRIMARY_KEY(mld_stdmsrtruimte_key, mld_s_mld_stdmsrtruimte_key);
END;
/

CREATE_TRIGGER(mld_t_mld_stdmsrtgebouw_B_IU)
BEFORE INSERT OR UPDATE ON mld_stdmsrtgebouw
FOR EACH ROW
BEGIN
    UPDATE_PRIMARY_KEY(mld_stdmsrtgebouw_key, mld_s_mld_stdmsrtgebouw_key);
END;
/

CREATE_TRIGGER(mld_t_mld_stdmsrtterrein_B_IU)
BEFORE INSERT OR UPDATE ON mld_stdmsrtterrein
FOR EACH ROW
BEGIN
    UPDATE_PRIMARY_KEY(mld_stdmsrtterrein_key, mld_s_mld_stdmsrtterrein_key);
END;
/

CREATE_TRIGGER(mld_t_ins_discipline_b_u)
BEFORE UPDATE ON ins_tab_discipline
FOR EACH ROW
BEGIN
    UPDATE mld_typeopdr_srtdiscipline
       SET mld_typeopdr_srtdiscipline.ins_srtdiscipline_key = :new.ins_srtdiscipline_key
     WHERE mld_typeopdr_srtdiscipline.ins_discipline_key = :new.ins_discipline_key
     AND :new.ins_discipline_module = 'MLD';
END;
/

CREATE_TRIGGER(mld_t_mld_discipline_discipline_B_I)
BEFORE INSERT ON mld_discipline_discipline
FOR EACH ROW
BEGIN
   UPDATE_PRIMARY_KEY(mld_discipline_discipline_key, mld_s_mld_disc_disc_key);
END;
/

REGISTERRUN('$Id$')

#endif  // MLD
