Files
Customer/onces/AA/RABO/RABO#62976.sql
2020-07-01 22:28:02 +00:00

219 lines
7.8 KiB
SQL

--
-- $Id$
--
-- Script containing customer specific sql statements for the RABO database
-- Herstelscript ivm dubbele taken in de RABO-omgeving door een handmatige synchronisatie van de standaardtaken met AAGN-omgeving
---- In overleg HeyDay, met Paul van Kessel, er voor gekozen dat de laatste vastgelegde basistaak LEADING wordt.
---- De overige basistaken die dubbel zijn, moeten dus na omzetting naar de max(basistaak) uit Facilitor verwijderd worden
DEFINE thisfile = 'RABO#62976.SQL'
DEFINE dbuser = '^RABO'
SET ECHO ON
SET DEFINE ON
COLUMN fcltlogfile NEW_VALUE fcltlogfile NOPRINT;
WHENEVER SQLERROR EXIT;
SELECT adm.scriptspoolfile('&dbuser', '&thisfile') AS fcltlogfile FROM DUAL;
WHENEVER SQLERROR CONTINUE;
SPOOL &fcltlogfile
SET DEFINE OFF
------ payload begin ------
-- Hulpview met alle basitaken - incl wel/geen objectaken, incl wel/geen historie
CREATE OR REPLACE VIEW rabo_v_taken_ontdubbelen
AS
SELECT d.ins_discipline_omschrijving,
i.ins_srtcontrole_key,
i.ins_srtcontrole_omschrijving,
v.aantal_basistaken,
v.max_key_basistaak,
ot.aantal_objecttaken,
otu.aantal_objecttaken_uitg
FROM ins_srtcontrole i,
ins_tab_discipline d,
( SELECT ins_srtcontrole_omschrijving,
COUNT (*) aantal_basistaken,
MAX (ins_srtcontrole_key) max_key_basistaak
FROM ins_srtcontrole
GROUP BY ins_srtcontrole_omschrijving) v,
( SELECT ins_srtcontrole_key, COUNT (*) aantal_objecttaken
FROM ins_srtcontroledl_xcp
GROUP BY ins_srtcontrole_key) ot,
( SELECT ins_srtcontrole_key, COUNT (*) aantal_objecttaken_uitg
FROM ins_deelsrtcontrole
GROUP BY ins_srtcontrole_key) otu
WHERE i.ins_srtcontrole_omschrijving =
v.ins_srtcontrole_omschrijving
AND v.aantal_basistaken > 1
AND i.ins_srtcontrole_key = ot.ins_srtcontrole_key(+)
AND i.ins_srtcontrole_key = otu.ins_srtcontrole_key(+)
AND i.ctr_discipline_key = d.ins_discipline_key
AND d.ins_discipline_module = 'CTR'
AND d.ins_discipline_verwijder IS NULL
-- AND v.max_key_basistaak= 6775
ORDER BY i.ins_srtcontrole_omschrijving, i.ins_srtcontrole_key;
-- PROCEDURE om alles van achter naar voor de herstellen en te laten verwijzen naar de MAX(srtcontrole_key)
CREATE OR REPLACE PROCEDURE rabo_taken_ontdubbelen (p_applname IN VARCHAR2,
p_applrun IN VARCHAR2)
AS
v_aanduiding VARCHAR2 (1000);
v_errorhint VARCHAR2 (1000);
v_errormsg VARCHAR2 (1000);
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
-- CURSOR 1 - Aanpassen - Alle uitgevoerde object-taken
CURSOR a
IS
SELECT max(dc.ins_deelsrtcontrole_key) as ins_deelsrtcontrole_key, max(dc.ins_srtcontrole_key) as ins_srtcontrole_key, v.max_key_basistaak, dc.ins_deel_key, dc.ins_deelsrtcontrole_datum_org
FROM
rabo_v_taken_ontdubbelen v,
ins_deelsrtcontrole dc,
ins_srtcontroledl_xcp ot
WHERE
v.ins_srtcontrole_key = dc.ins_srtcontrole_key
AND v.max_key_basistaak <> dc.ins_srtcontrole_key
-- AND dc.ins_deel_key = 6775
AND (dc.ins_srtcontrole_key = ot.ins_srtcontrole_key AND dc.ins_deel_key = ot.ins_deel_key)
-- AND dc.ins_deelsrtcontrole_datum_org IS NOT NULL
AND NOT EXISTS -- Als er al op de max_key voor dat ins_deel_key, voor die datum_org al een record bestaat dan overslaan...
(
SELECT ins_deelsrtcontrole_key
FROM ins_deelsrtcontrole
WHERE ins_srtcontrole_key = v.max_key_basistaak AND ins_deel_key = dc.ins_deel_key AND ins_deelsrtcontrole_datum_org = dc.ins_deelsrtcontrole_datum_org
)
GROUP BY v.max_key_basistaak, dc.ins_deel_key, dc.ins_deelsrtcontrole_datum_org
;
-- CURSOR 2 - Aanpassen - Alle gekoppelde object-taken
CURSOR b
IS
SELECT
max(srt.ins_srtcontroledl_xcp_key) as ins_srtcontroledl_xcp_key, max(srt.ins_srtcontrole_key),
v.max_key_basistaak, srt.ins_deel_key
FROM
rabo_v_taken_ontdubbelen v,
ins_srtcontroledl_xcp srt
WHERE
v.ins_srtcontrole_key = srt.ins_srtcontrole_key
AND v.max_key_basistaak <> srt.ins_srtcontrole_key
AND NOT EXISTS (SELECT 1 FROM ins_srtcontroledl_xcp WHERE ins_deel_key = srt.ins_deel_key AND ins_srtcontrole_key = v.max_key_basistaak)
GROUP BY v.max_key_basistaak, srt.ins_deel_key ;
-- CUSRSOR Alle kenmerk-taakvelden koppelen naar juiste/max ins_srtcontrole_key
CURSOR c
IS
SELECT km.ins_srtkenmerk_key, max(km.ins_kenmerk_key) as ins_kenmerk_key, v.max_key_basistaak
FROM
rabo_v_taken_ontdubbelen v,
ins_kenmerk km
WHERE
v.ins_srtcontrole_key = km.ins_srtinstallatie_key
AND v.max_key_basistaak <> km.ins_srtinstallatie_key
AND km.ins_kenmerk_niveau = 'C'
AND NOT EXISTS -- Als er al kenmerkvelden op de basistaak zijn aangemaakt dan hoeven diegene aan de dubbele taken niet omgezet te worden
(
SELECT distinct(k.ins_kenmerk_key)
FROM ins_kenmerk k, rabo_v_taken_ontdubbelen v
WHERE k.ins_srtinstallatie_key = v.max_key_basistaak AND k.ins_srtkenmerk_key = km.ins_srtkenmerk_key
)
GROUP BY km.ins_srtkenmerk_key, v.max_key_basistaak ;
-- CURSOR - Alle DUBBELE basistaken verwijderen
CURSOR d
IS
SELECT v.ins_srtcontrole_key, v.max_key_basistaak
FROM
rabo_v_taken_ontdubbelen v,
ins_srtcontrole ct
WHERE
v.ins_srtcontrole_key = ct.ins_srtcontrole_key
AND v.ins_srtcontrole_key <> v.max_key_basistaak ;
BEGIN
FOR rec IN a
LOOP
v_errorhint := 'Update ins_deelsrtcontrole: ' || rec.ins_deelsrtcontrole_key;
UPDATE ins_deelsrtcontrole
SET ins_srtcontrole_key = rec.max_key_basistaak
WHERE ins_deelsrtcontrole_key = rec.ins_deelsrtcontrole_key;
END LOOP;
FOR rec IN b
LOOP
v_errorhint := 'Update ins_srtcontroledl_xcp: ' || rec.ins_srtcontroledl_xcp_key;
UPDATE ins_srtcontroledl_xcp
SET ins_srtcontrole_key = rec.max_key_basistaak
WHERE ins_srtcontroledl_xcp_key = rec.ins_srtcontroledl_xcp_key ;
END LOOP;
FOR rec IN c
LOOP
v_errorhint := 'Update ins_kenmerk: ' || rec.ins_kenmerk_key;
UPDATE ins_kenmerk
SET ins_srtinstallatie_key = rec.max_key_basistaak
WHERE ins_kenmerk_key = rec.ins_kenmerk_key ;
END LOOP;
FOR rec IN d
LOOP
v_errorhint := 'Update ins_srtcontrole: ' || rec.ins_srtcontrole_key;
DELETE ins_srtcontrole
WHERE ins_srtcontrole_key = rec.ins_srtcontrole_key ;
END LOOP;
-- Nog aanvullen met verwijderen van alle records in ins_kenmerk die GEEN koppeling meer hebben naar ins_srtcontrole_key
-- Wel/niet doen? Bij handmatig verwijderen van een taak wordt deze tabel ook niet opgeschoond...
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
v_errormsg :=
'OTHERS (error ' || oracle_err_num || '/' || oracle_err_mes;
fac.writelog (p_applname,
'E',
v_errormsg,
v_errorhint);
END;
/
-- RUNNEN procedure
begin rabo_taken_ontdubbelen ('taken_ontdubbelen',null);
end;
/
-- DROPPEN van view en procedure
DROP PROCEDURE rabo_taken_ontdubbelen ;
DROP VIEW rabo_v_taken_ontdubbelen ;
----- payload end ------
SET DEFINE OFF
BEGIN adm.systrackscriptId ('$Id$', 1); END;
/
COMMIT;
SET ECHO OFF
SPOOL OFF
SET DEFINE ON
PROMPT Logfile of this upgrade is: &fcltlogfile