-- 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