-- Customer specific once-script ARAI.
--
-- (c) 2013 SG|facilitor bv
-- $Revision$
-- $Id$
--
-- Support: +31 53 4800700
--
-- Meetwaarden opruim script.
-- Alles meer dan 30 dagen oud wordt verwijderd
-- Omdat Oracle uren (zo niet dagen) bezig zou zijn hiermee via een
-- zogeheten CTAS (Create Table As Select)

SET ECHO ON
SPOOL ARAI25591.lst
SET DEFINE OFF

CREATE TABLE ARAI25591
AS
   (SELECT ikd.*
      FROM ins_kenmerkdeel ikd, ins_deel idd, ins_kenmerk ik
     WHERE ikd.ins_kenmerk_key = ik.ins_kenmerk_key
           AND ikd.ins_deel_key = idd.ins_deel_key
           AND (ins_kenmerkdeel_aanmaak > SYSDATE - 30 -- Filteren op alle records die moeten *blijven*
                OR ik.ins_kenmerk_meetwaarde = 0
                OR ik.ins_kenmerk_meetwaarde IS NULL
                OR ins_kenmerkdeel_verwijder IS NULL
                )
   );

ACCEPT doorgaan PROMPT 'Doorgaan: '

DROP TABLE ins_kenmerkdeel PURGE;

ALTER TABLE ARAI25591 RENAME TO ins_kenmerkdeel;
-- Nu weer alle triggers etcetera er op
CREATE INDEX INS_I_INS_KENMERK_DEEL1 ON INS_KENMERKDEEL (INS_DEEL_KEY);
CREATE INDEX INS_I_INS_KENMERK_KENMERK1 ON INS_KENMERKDEEL (INS_KENMERK_KEY);
CREATE INDEX INS_I_INS_KENMERK_KENMERK2 ON INS_KENMERKDEEL (INS_KENMERKDEEL_WAARDE);
CREATE UNIQUE INDEX INS_K_INS_KENMERKDEEL_KEY ON INS_KENMERKDEEL (INS_KENMERKDEEL_KEY);
CREATE UNIQUE INDEX INS_U_INS_KENMERKDEEL ON INS_KENMERKDEEL (INS_KENMERK_KEY, INS_DEEL_KEY, INS_KENMERKDEEL_VERWIJDER);

CREATE OR REPLACE TRIGGER ins_t_ins_kenmerkdeel_b_iu
BEFORE INSERT OR UPDATE ON ins_kenmerkdeel
FOR EACH ROW
BEGIN
IF :new.ins_kenmerkdeel_waarde <> :old.ins_kenmerkdeel_waarde
OR :old.ins_kenmerkdeel_waarde IS NULL
OR :new.ins_kenmerkdeel_waarde IS NULL
THEN
DECLARE
   SrtKenmerkOmschr   ins_srtkenmerk.ins_srtkenmerk_omschrijving%TYPE;
   SrtKenmerkType     ins_srtkenmerk.ins_srtkenmerk_kenmerktype%TYPE;
   SrtKenmerkLengte   ins_srtkenmerk.ins_srtkenmerk_lengte%TYPE;
   SrtKenmerkDec      ins_srtkenmerk.ins_srtkenmerk_dec%TYPE;
   SrtKenmerkNMin     ins_srtkenmerk.ins_srtkenmerk_nmin%TYPE;
   SrtKenmerkNMax     ins_srtkenmerk.ins_srtkenmerk_nmax%TYPE;
   KenmerkVerplicht   ins_kenmerk.ins_kenmerk_verplicht%TYPE;
   NumberWaarde       NUMBER(25,5);
   FormatMask         VARCHAR2(60);
   KenmerkDeelWaarde  ins_kenmerkdeel.ins_kenmerkdeel_waarde%TYPE;
BEGIN
   KenmerkDeelWaarde := :new.ins_kenmerkdeel_waarde;
   SELECT INS_SK.ins_srtkenmerk_omschrijving,
          INS_SK.ins_srtkenmerk_kenmerktype,
          INS_SK.ins_srtkenmerk_lengte,
          INS_SK.ins_srtkenmerk_dec,
          INS_SK.ins_srtkenmerk_nmin,
          INS_SK.ins_srtkenmerk_nmax,
          INS_K.ins_kenmerk_verplicht
   INTO  SrtKenmerkOmschr,
         SrtKenmerkType,
         SrtKenmerkLengte,
         SrtKenmerkDec,
         SrtKenmerkNMin,
         SrtKenmerkNMax,
         KenmerkVerplicht
   FROM ins_srtkenmerk INS_SK, ins_kenmerk INS_K
   WHERE INS_SK.ins_srtkenmerk_key = INS_K.ins_srtkenmerk_key
     AND INS_K.ins_kenmerk_key = :new.ins_kenmerk_key;
   IF KenmerkVerplicht IS NOT NULL AND KenmerkDeelWaarde IS NULL
   THEN
      raise_application_error(-20004, 'ins_m149,'||SrtKenmerkOmschr);
   ELSIF SrtKenmerkType = 'C'
   THEN
      IF LENGTH(KenmerkDeelWaarde) > SrtKenmerkLengte
      THEN
         raise_application_error(-20004, 'ins_m143,'||SrtKenmerkOmschr||','||TO_CHAR(SrtKenmerkLengte));
      END IF;
   ELSIF SrtKenmerkType = 'N'
   THEN
     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(KenmerkDeelWaarde);
     EXCEPTION
      WHEN OTHERS
      THEN FormatMask := REPLACE(FormatMask, '9', '#');
           FormatMask := REPLACE(FormatMask, '0', '#');
           FormatMask := REPLACE(FormatMask, 'D', '.');
           raise_application_error(-20004, 'ins_m146,'||SrtKenmerkOmschr||','||FormatMask);
     END;
      IF (SrtKenmerkNMin IS NOT NULL
      AND NumberWaarde < SrtKenmerkNMin)
      OR (SrtKenmerkNMax IS NOT NULL
      AND NumberWaarde > SrtKenmerkNMax)
      THEN
raise_application_error(-20004, 'ins_m145,'||SrtKenmerkOmschr||','|| TO_CHAR(SrtKenmerkNMin)||','|| TO_CHAR(SrtKenmerkNMax));
      ELSE
          KenmerkDeelWaarde := LTRIM(TO_CHAR(NumberWaarde, FormatMask));
          IF INSTR(KenmerkDeelWaarde, '#') <> 0
          THEN
            FormatMask := REPLACE(FormatMask, '9', '#');
            FormatMask := REPLACE(FormatMask, '0', '#');
            FormatMask := REPLACE(FormatMask, 'D', '.');
            raise_application_error(-20004, 'ins_m146,'||SrtKenmerkOmschr||','||FormatMask);
          END IF;
      END IF;
      :new.ins_kenmerkdeel_waarde := KenmerkDeelWaarde;
   ELSIF SrtKenmerkType = 'D'
   THEN
      KenmerkDeelWaarde := TO_CHAR(TO_DATE(KenmerkDeelWaarde,'DD-MM-YY'), 'DD-MM-YYYY');
      :new.ins_kenmerkdeel_waarde := KenmerkDeelWaarde;
   END IF;
END;
   IF :new.ins_kenmerkdeel_key IS NULL THEN SELECT ins_s_ins_kenmerkdeel_key.nextval INTO :new.ins_kenmerkdeel_key FROM DUAL; END IF;

END IF;
END;
/


ALTER TABLE INS_KENMERKDEEL ADD (
  CONSTRAINT INS_R_INS_KENMERK_DEEL_KEY1
 CHECK (ins_deel_key IS NOT NULL),
  CONSTRAINT INS_R_INS_KENMERK_KEY1
 CHECK (ins_kenmerk_key IS NOT NULL),
  CONSTRAINT INS_K_INS_KENMERKDEEL_KEY
 PRIMARY KEY
 (INS_KENMERKDEEL_KEY),
  CONSTRAINT INS_U_INS_KENMERKDEEL
 UNIQUE (INS_KENMERK_KEY, INS_DEEL_KEY, INS_KENMERKDEEL_VERWIJDER));

ALTER TABLE INS_KENMERKDEEL ADD (
  CONSTRAINT INS_R_INS_KENMERK_KEY2
 FOREIGN KEY (INS_KENMERK_KEY)
 REFERENCES INS_KENMERK (INS_KENMERK_KEY));

ALTER TABLE INS_KENMERKDEEL MODIFY INS_KENMERKDEEL_AANMAAK  DEFAULT SYSDATE;

ALTER TABLE INS_KENMERKDEEL
ADD CONSTRAINT INS_C_INS_KENMERKDEEL_AANMAAK CHECK(INS_KENMERKDEEL_AANMAAK IS NOT NULL) ;

BEGIN adm.systrackscript('$Workfile: ARAI#25591 $', '$Revision$', 1); END;
/
SPOOL OFF
