212 lines
9.3 KiB
SQL
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
|