Files
Customer/onces/CEVA/CEVA#56862.sql
Sander Schepers 3ba1afdb04 CEVA#56862 Omzetting objecten, DB user in fac_version was CEVA ipv CEVA_FMIS
svn path=/Customer/; revision=46536
2020-04-10 08:09:46 +00:00

212 lines
9.3 KiB
SQL

--
-- $Id$
--
-- <<Procedure om objecten om te zetten naar een andere objectsoort>>
--
DEFINE thisfile = 'CEVA#56862.SQL'
DEFINE dbuser = '^CEVA'
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 ------
DECLARE
v_errorhint VARCHAR2 (100);
-- Dit is een tijdelijke procedure, om objecten om te zetten naar een nieuwe objecttype.
-- Onderstaande cursor bepaalt, na import van de objectenlijst met als kenmerk de nieuwe objectdiscipline/groep/type de oude en de nieuwe objecttype key.
CURSOR objects
IS
SELECT ins_discipline_omschrijving,
ins_srtgroep_omschrijving,
ins_srtdeel_code,
ins_srtdeel_omschrijving,
srtdeel_key_old,
disc_key_new,
srtdeel_key_new
FROM ( SELECT imp.ins_discipline_omschrijving,
imp.ins_srtgroep_omschrijving,
imp.ins_srtdeel_code,
imp.ins_srtdeel_omschrijving,
(SELECT MIN (ins_srtdeel_key)
FROM ins_srtdeel sd,
ins_srtgroep sg,
ins_tab_discipline disc
WHERE sd.ins_srtdeel_verwijder IS NULL
AND sg.ins_srtgroep_verwijder IS NULL
AND disc.ins_discipline_verwijder IS NULL
AND sd.ins_srtgroep_key = sg.ins_srtgroep_key
AND sg.ins_discipline_key =
disc.ins_discipline_key
AND UPPER (disc.ins_discipline_omschrijving) =
UPPER (imp.ins_discipline_omschrijving)
AND UPPER (sg.ins_srtgroep_omschrijving) =
UPPER (imp.ins_srtgroep_omschrijving)
AND UPPER (sd.ins_srtdeel_omschrijving) =
UPPER (imp.ins_srtdeel_omschrijving))
AS srtdeel_key_old,
(SELECT MAX (disc.ins_discipline_key)
FROM ins_srtdeel sd,
ins_srtgroep sg,
ins_tab_discipline disc
WHERE sd.ins_srtdeel_verwijder IS NULL
AND sg.ins_srtgroep_verwijder IS NULL
AND disc.ins_discipline_verwijder IS NULL
AND sd.ins_srtgroep_key = sg.ins_srtgroep_key
AND sg.ins_discipline_key =
disc.ins_discipline_key
AND UPPER (disc.ins_discipline_omschrijving) =
UPPER (imp.ins_kenmerkwaarde2)
AND UPPER (sg.ins_srtgroep_omschrijving) =
UPPER (imp.ins_kenmerkwaarde3)
AND UPPER (sd.ins_srtdeel_omschrijving) =
UPPER (imp.ins_kenmerkwaarde4))
AS disc_key_new,
(SELECT MAX (ins_srtdeel_key)
FROM ins_srtdeel sd,
ins_srtgroep sg,
ins_tab_discipline disc
WHERE sd.ins_srtdeel_verwijder IS NULL
AND sg.ins_srtgroep_verwijder IS NULL
AND disc.ins_discipline_verwijder IS NULL
AND sd.ins_srtgroep_key = sg.ins_srtgroep_key
AND sg.ins_discipline_key =
disc.ins_discipline_key
AND UPPER (disc.ins_discipline_omschrijving) =
UPPER (imp.ins_kenmerkwaarde2)
AND UPPER (sg.ins_srtgroep_omschrijving) =
UPPER (imp.ins_kenmerkwaarde3)
AND UPPER (sd.ins_srtdeel_omschrijving) =
UPPER (imp.ins_kenmerkwaarde4))
AS srtdeel_key_new
FROM fac_imp_ins imp
ORDER BY imp.ins_discipline_omschrijving,
imp.ins_srtgroep_omschrijving,
imp.ins_srtdeel_omschrijving)
WHERE srtdeel_key_old IS NOT NULL AND srtdeel_key_new IS NOT NULL
GROUP BY ins_discipline_omschrijving,
ins_srtgroep_omschrijving,
ins_srtdeel_code,
ins_srtdeel_omschrijving,
srtdeel_key_old,
disc_key_new,
srtdeel_key_new;
CURSOR insdeel (
p_ins_srtdeel_key_old IN NUMBER)
IS
SELECT ins_deel_key, ins_srtdeel_key, ins_deel_omschrijving
FROM ins_deel
WHERE ins_deel_verwijder IS NULL
AND ins_srtdeel_key = p_ins_srtdeel_key_old;
BEGIN
v_errorhint := 'init';
-- We zetten objecten om naar de nieuwe objectenstructuur.
-- per obectsoort (was->wordt) wordt dit uitgevoerd.
FOR rec IN objects
LOOP
BEGIN
v_errorhint := 'Omzetten deel_key';
BEGIN
FOR recins IN insdeel (rec.srtdeel_key_old)
-- Hier voeren we daadwerkelijk de update van de was-wordt uit.
-- Daarbij voeren we dit per rec.srtdeel_key_old (=was) uit.
-- Dit wordt als parameter meegegeven aan cursor insdeel, zodat die tweede cursor steeds enkel loopt over het stukje was-wordt dat dan geraakt wordt.
LOOP
BEGIN
UPDATE ins_deel
SET ins_srtdeel_key = rec.srtdeel_key_new,
ins_discipline_key = rec.disc_key_new
WHERE ins_deel_key = recins.ins_deel_key;
-- We voegen tracking toe, om achteraf te zien welke objecten zijn omgezet.
fac.trackaction (
'INSUPD',
recins.ins_deel_key,
NULL,
NULL,
'Object changed from object type '
|| rec.srtdeel_key_old
|| ' to '
|| rec.srtdeel_key_new);
EXCEPTION
WHEN DUP_VAL_ON_INDEX
THEN
UPDATE ins_deel
SET ins_srtdeel_key = rec.srtdeel_key_new,
ins_discipline_key = rec.disc_key_new,
ins_deel_omschrijving =
ins_deel_key
|| '##'
|| SUBSTR (ins_deel_omschrijving, 54)
WHERE ins_deel_key = recins.ins_deel_key;
-- We voegen tracking toe, om achteraf te zien welke objecten zijn omgezet.
fac.trackaction (
'INSUPD',
recins.ins_deel_key,
NULL,
NULL,
'Object changed from object type '
|| rec.srtdeel_key_old
|| ' to '
|| rec.srtdeel_key_new
|| '. Also identification was changed.');
END;
END LOOP;
END;
END;
END LOOP;
-- De eerder ingelezen objecten tbv de nieuwe objecttypen (200 stuks) worden hiermee verwijderd.
DELETE ins_deel
WHERE ins_deel_omschrijving = 'DELETE';
-- De objecttypen die leeg zijn (ongeveer 600 stuks) worden hiermee meteen onzichtbaar gemaakt
UPDATE ins_srtdeel
SET ins_srtdeel_verwijder = SYSDATE
WHERE ins_srtdeel_key IN
(SELECT ins_srtdeel_key
FROM ins_srtdeel
WHERE ins_srtdeel_key NOT IN
(SELECT ins_srtdeel_key
FROM ins_deel
WHERE ins_deel_verwijder IS NULL)
AND ins_srtdeel_verwijder IS NULL);
-- 2 identieke objectgroepen ontdubbelen (groep 'Warehouse equipment' binnen de discipline 'Warehouse equipment'). Hier staan ongeveer 700 objecten op en er worden 73 objectsoorten mee omgezet.
UPDATE ins_srtdeel
SET ins_srtgroep_key = 16
WHERE ins_srtgroep_key = 21;
-- De objectgroepen die leeg zijn (29 stuks) worden hiermee meteen onzichtbaar gemaakt
UPDATE ins_srtgroep
SET ins_srtgroep_verwijder = SYSDATE
WHERE ins_srtgroep_key NOT IN (SELECT ins_srtgroep_key
FROM ins_srtdeel
WHERE ins_srtdeel_verwijder IS NULL)
AND ins_srtgroep_verwijder IS NULL;
END;
/
------ 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