219 lines
7.8 KiB
SQL
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 |