CONN#22935

svn path=/Customer/trunk/; revision=15850
This commit is contained in:
Maarten van der Heide
2012-11-08 11:40:26 +00:00
parent d20ccb80db
commit 2ba8fe6b6a

View File

@@ -11698,6 +11698,976 @@ EXCEPTION
END conn_update_keurobjecten;
/
/* Formatted on 6-11-2012 12:12:12 (QP5 v5.115.810.9015) */
CREATE OR REPLACE VIEW conn_v_rap_srtdeel_swap_expimp
(
fclt_f_discipline,
fclt_f_groep,
fclt_f_objectsoort,
fclt_f_objectsoort_code,
objectsoort_aanmaak,
object_id,
cur_objectsoort_key,
new_objectsoort_key,
object_aanmaak,
fclt_f_locatie_code,
locatie_oms,
fclt_f_controle,
controle_periode,
controle_key,
fclt_f_contract,
fclt_f_contract_lev
)
AS
SELECT x.discipline,
x.groep,
x.objectsoort,
x.objectsoort_code,
TO_CHAR (x.objectsoort_aanmaak, 'dd-mm-yyyy hh24:mi:ss')
objectsoort_aanmaak,
x.object,
TO_CHAR (x.objectsoort_key),
NULL,
TO_CHAR (x.object_aanmaak, 'dd-mm-yyyy hh24:mi:ss')
object_aanmaak,
x.alg_locatie_code,
x.alg_locatie_omschrijving,
csd.ins_srtcontrole_omschrijving controle,
TO_CHAR (csd.ins_srtcontrole_periode) controle_periode,
TO_CHAR (csd.ins_srtcontrole_key) controle_key,
c.contract,
c.contract_lev
FROM (SELECT td.ins_discipline_omschrijving discipline,
sg.ins_srtgroep_omschrijving groep,
sd.ins_srtdeel_omschrijving objectsoort,
sd.ins_srtdeel_code objectsoort_code,
sd.ins_srtdeel_key objectsoort_key,
sd.ins_srtdeel_aanmaak objectsoort_aanmaak,
'*** Alle ***' object,
NULL object_key,
NULL object_aanmaak,
'*** Alle ***' alg_locatie_code,
NULL alg_locatie_omschrijving,
NULL alg_locatie_key
FROM ins_srtdeel sd,
ins_srtgroep sg,
ins_tab_discipline td
WHERE sd.ins_srtgroep_key = sg.ins_srtgroep_key
AND sg.ins_discipline_key = td.ins_discipline_key
AND EXISTS
(SELECT 1
FROM ins_v_aanwezigdeel
WHERE ins_srtdeel_key =
sd.ins_srtdeel_key)
UNION ALL
SELECT td.ins_discipline_omschrijving discipline,
sg.ins_srtgroep_omschrijving groep,
sd.ins_srtdeel_omschrijving objectsoort,
sd.ins_srtdeel_code objectsoort_code,
sd.ins_srtdeel_key objectsoort_key,
sd.ins_srtdeel_aanmaak objectsoort_aanmaak,
d.ins_deel_omschrijving object,
d.ins_deel_key object_key,
d.ins_deel_aanmaak object_aanmaak,
--d.ins_alg_ruimte_key,
--d.ins_alg_ruimte_type,
l.alg_locatie_code,
l.alg_locatie_omschrijving,
l.alg_locatie_key
FROM ins_v_aanwezigdeel d,
ins_srtdeel sd,
ins_srtgroep sg,
ins_tab_discipline td,
alg_locatie l
WHERE d.ins_srtdeel_key = sd.ins_srtdeel_key
AND sd.ins_srtgroep_key = sg.ins_srtgroep_key
AND sg.ins_discipline_key = td.ins_discipline_key
AND d.ins_alg_locatie_key = l.alg_locatie_key(+))
x
LEFT JOIN
(SELECT scs.ins_srtinstallatie_key ins_srtdeel_key,
scs.ins_srtcontrole_key,
scs.ins_srtcontrole_omschrijving,
scs.ins_srtcontrole_periode
FROM ins_srtcontrole scs
WHERE scs.ins_srtcontrole_niveau = 'S'
UNION ALL
SELECT sd.ins_srtdeel_key,
scg.ins_srtcontrole_key,
scg.ins_srtcontrole_omschrijving,
scg.ins_srtcontrole_periode
FROM ins_srtcontrole scg, ins_srtdeel sd
WHERE scg.ins_srtcontrole_niveau = 'G'
AND scg.ins_srtinstallatie_key =
sd.ins_srtgroep_key
UNION ALL
SELECT sd.ins_srtdeel_key,
scd.ins_srtcontrole_key,
scd.ins_srtcontrole_omschrijving,
scd.ins_srtcontrole_periode
FROM ins_srtcontrole scd,
ins_srtgroep sg,
ins_srtdeel sd
WHERE scd.ins_srtcontrole_niveau = 'D'
AND scd.ins_srtinstallatie_key =
sg.ins_discipline_key
AND sg.ins_srtgroep_key = sd.ins_srtgroep_key)
csd
ON x.objectsoort_key = csd.ins_srtdeel_key
AND x.object != '*** Alle ***'
-- LEFT JOIN
-- (SELECT DISTINCT
-- co.cnt_ins_deel_key,
-- c.cnt_contract_nummer_intern,
-- b.prs_bedrijf_naam
-- FROM cnt_contract_object co,
-- cnt_contract c,
-- ins_tab_discipline cd,
-- prs_bedrijf b
-- WHERE co.cnt_contract_object_verwijder IS NULL
-- AND co.cnt_ins_deel_key IS NOT NULL
-- AND co.cnt_contract_key = c.cnt_contract_key
-- AND c.cnt_contract_looptijd_tot >=
-- TRUNC (ADD_MONTHS (SYSDATE, -12), 'YYYY')
-- AND c.ins_discipline_key = cd.ins_discipline_key
-- AND cd.ins_discipline_verwijder IS NULL
-- AND c.cnt_prs_bedrijf_key = b.prs_bedrijf_key)
-- lev_onderhd
-- ON x.object_key = lev_onderhd.cnt_ins_deel_key
LEFT JOIN
(SELECT DISTINCT co.cnt_ins_srtdeel_key,
g.alg_locatie_key,
c.cnt_contract_nummer_intern contract,
b.prs_bedrijf_naam contract_lev
FROM cnt_contract_object co,
cnt_contract c,
ins_tab_discipline cd,
cnt_contract_plaats cp,
alg_gebouw g,
prs_bedrijf b
WHERE co.cnt_contract_object_verwijder IS NULL
AND co.cnt_ins_srtdeel_key IS NOT NULL
AND co.cnt_contract_key = c.cnt_contract_key
AND c.cnt_contract_looptijd_tot >=
TRUNC (ADD_MONTHS (SYSDATE, -12), 'YYYY')
AND c.ins_discipline_key = cd.ins_discipline_key
AND cd.ins_discipline_verwijder IS NULL
AND c.cnt_contract_key = cp.cnt_contract_key
AND ( (cp.cnt_alg_plaats_code = 'G'
AND cp.cnt_alg_plaats_key = g.alg_gebouw_key)
OR (cp.cnt_alg_plaats_code = 'L'
AND cp.cnt_alg_plaats_key =
g.alg_locatie_key))
AND c.cnt_prs_bedrijf_key = b.prs_bedrijf_key) c
ON x.objectsoort_key = c.cnt_ins_srtdeel_key
AND x.alg_locatie_key = c.alg_locatie_key
WHERE x.objectsoort_key != 43401;
/* Formatted on 6-11-2012 12:28:00 (QP5 v5.115.810.9015) */
CREATE OR REPLACE PROCEDURE conn_import_srtdeel_swap (p_import_key IN NUMBER)
IS
c_delim VARCHAR2 (1) := ';';
c_impline_mark VARCHAR2 (100) := '*** Alle ***';
v_newline VARCHAR2 (1000); -- Input line
v_errormsg VARCHAR2 (1000);
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
header_is_valid NUMBER;
v_count_tot NUMBER (10);
v_count_import NUMBER (10);
v_ongeldig NUMBER (1);
v_aanduiding VARCHAR (200);
-- De importvelden:
x_ins_discipline_omschrijving VARCHAR2 (255); -- C30
x_ins_srtgroep_omschrijving VARCHAR2 (255); -- C60
x_ins_srtdeel_omschrijving VARCHAR2 (255); -- C100
x_ins_srtdeel_code VARCHAR2 (255); -- C10
x_ins_srtdeel_aanmaak VARCHAR2 (255); -- DATE
x_ins_deel_omschrijving VARCHAR2 (255); -- C60
v_cur_srtdeel_key VARCHAR2 (255); -- N10
v_new_srtdeel_key VARCHAR2 (255); -- N10
CURSOR c1
IS
SELECT *
FROM fac_imp_file
WHERE fac_import_key = p_import_key
ORDER BY fac_imp_file_index;
BEGIN
DELETE FROM conn_imp_srtdeel_swap;
COMMIT;
v_count_tot := 0;
v_count_import := 0;
header_is_valid := 0;
FOR rec1 IN c1
LOOP
BEGIN
v_newline := rec1.fac_imp_file_line;
v_errormsg := 'Fout bij opvragen importregel';
v_aanduiding := '';
v_ongeldig := 0;
-- Lees alle veldwaarden
fac.imp_getfield (v_newline, c_delim, x_ins_discipline_omschrijving);
fac.imp_getfield (v_newline, c_delim, x_ins_srtgroep_omschrijving);
fac.imp_getfield (v_newline, c_delim, x_ins_srtdeel_omschrijving);
fac.imp_getfield (v_newline, c_delim, x_ins_srtdeel_code);
fac.imp_getfield (v_newline, c_delim, x_ins_srtdeel_aanmaak);
fac.imp_getfield (v_newline, c_delim, x_ins_deel_omschrijving);
fac.imp_getfield (v_newline, c_delim, v_cur_srtdeel_key);
fac.imp_getfield (v_newline, c_delim, v_new_srtdeel_key);
--Don't care the columns that might follow the above columns!
v_aanduiding :=
'['
|| x_ins_discipline_omschrijving
|| '|'
|| x_ins_srtgroep_omschrijving
|| '|'
|| x_ins_srtdeel_omschrijving
|| '|'
|| x_ins_deel_omschrijving
|| '] ';
-- Ik controleer of ik een geldige header heb, dat is: in de juiste kolommen
-- de juiste kolomkop. Ik controleer daarbij ALLE kolommen!
-- Ik negeer alles totdat ik een geldige header ben gepasseerd.
IF (header_is_valid = 0)
THEN
IF UPPER (x_ins_discipline_omschrijving) = 'DISCIPLINE'
AND UPPER (x_ins_srtgroep_omschrijving) = 'GROEP'
AND UPPER (x_ins_srtdeel_omschrijving) = 'OBJECTSOORT'
AND UPPER (x_ins_srtdeel_code) = 'OBJECTSOORT_CODE'
AND UPPER (x_ins_srtdeel_aanmaak) = 'OBJECTSOORT_AANMAAK'
AND UPPER (x_ins_deel_omschrijving) = 'OBJECT_ID'
AND UPPER (v_cur_srtdeel_key) = 'CUR_OBJECTSOORT_KEY'
AND UPPER (v_new_srtdeel_key) = 'NEW_OBJECTSOORT_KEY'
THEN
header_is_valid := 1;
END IF;
ELSE
-- Alleen '*** Alle ***-regels; skip de rest (alleen ter informatie)!
IF (x_ins_deel_omschrijving = c_impline_mark)
THEN
v_count_tot := v_count_tot + 1;
-- Controleer alle veldwaarden
-- Skip 'DISCIPLINE'
-- Skip 'GROEP'
-- Skip 'OBJECTSOORT'
-- Skip 'OBJECTSOORT_CODE'
-- Skip 'OBJECTSOORT_AANMAAK'
-- Skip 'OBJECT_ID'
--
v_errormsg := 'CUR_OBJECTSOORT_KEY ongeldig';
v_cur_srtdeel_key := TRIM (v_cur_srtdeel_key);
IF (v_cur_srtdeel_key IS NULL
OR fac.safe_to_number (v_cur_srtdeel_key) IS NULL)
THEN
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || v_errormsg,
'Regel wordt overgeslagen');
v_ongeldig := 1;
END IF;
--
v_errormsg := 'NEW_OBJECTSOORT_KEY ongeldig';
v_new_srtdeel_key := TRIM (v_new_srtdeel_key);
IF (v_new_srtdeel_key IS NULL
OR fac.safe_to_number (v_new_srtdeel_key) IS NULL)
THEN
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || v_errormsg,
'Regel wordt overgeslagen');
v_ongeldig := 1;
END IF;
-- Insert geformatteerde import record
IF v_ongeldig = 0
THEN
BEGIN
v_errormsg := 'Fout bij wegschrijven importregel';
INSERT INTO conn_imp_srtdeel_swap (
cur_srtdeel_key,
new_srtdeel_key
)
VALUES (
fac.safe_to_number (v_cur_srtdeel_key),
fac.safe_to_number (v_new_srtdeel_key)
);
COMMIT;
v_count_import := v_count_import + 1;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
v_errormsg :=
v_errormsg
|| ' ORACLE (error '
|| oracle_err_num
|| '/'
|| oracle_err_mes
|| ')';
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || v_errormsg,
'');
COMMIT;
END;
END IF;
END IF;
END IF;
END;
END LOOP;
IF (header_is_valid = 0)
THEN
fac.imp_writelog (p_import_key,
'E',
'Ongeldig importbestand',
'Geen header of header niet volgens specificatie!');
ELSE
fac.imp_writelog (
p_import_key,
'S',
'Aantal ingelezen importregels: ' || TO_CHAR (v_count_tot),
''
);
fac.imp_writelog (
p_import_key,
'S',
'Aantal ongeldige niet ingelezen importregels: '
|| TO_CHAR (v_count_tot - v_count_import),
''
);
END IF;
COMMIT;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
v_errormsg :=
v_errormsg
|| ' ORACLE (error '
|| oracle_err_num
|| '/'
|| oracle_err_mes
|| ')';
fac.imp_writelog (p_import_key,
'E',
v_aanduiding || v_errormsg,
'Inleesproces SRTDEEL_SWAP afgebroken!');
END conn_import_srtdeel_swap;
/
/* Formatted on 7-11-2012 9:12:15 (QP5 v5.115.810.9015) */
CREATE OR REPLACE PROCEDURE conn_update_srtdeel_swap (p_import_key IN NUMBER)
AS
CURSOR rc
IS
SELECT DISTINCT
cur_srtdeel_key,
d1.ins_srtgroep_key cur_srtgroep_key,
d1.ins_srtdeel_omschrijving cur_srtdeel_oms,
TRIM(DECODE (
INSTR (d1.ins_srtdeel_omschrijving, ' '),
0,
'-',
SUBSTR (d1.ins_srtdeel_omschrijving,
INSTR (d1.ins_srtdeel_omschrijving, ' ') + 1)
))
cur_objectsoort_postfix,
new_srtdeel_key,
d2.ins_srtgroep_key new_srtgroep_key,
d2.ins_srtdeel_omschrijving new_srtdeel_oms
FROM conn_imp_srtdeel_swap sd, ins_srtdeel d1, ins_srtdeel d2
WHERE sd.cur_srtdeel_key IS NOT NULL
AND sd.new_srtdeel_key IS NOT NULL
AND sd.cur_srtdeel_key = d1.ins_srtdeel_key(+)
AND sd.new_srtdeel_key = d2.ins_srtdeel_key(+);
c_charnum_z NUMBER (10) := 90; -- Letter 'Z'!
c_type_srtkey NUMBER (10) := 41;
v_errormsg VARCHAR2 (1000);
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
v_aanduiding VARCHAR (200);
v_skip BOOLEAN;
v_count NUMBER;
v_count_upd NUMBER;
v_kenmerkdeel_key NUMBER (10);
v_kenmerk_key NUMBER (10);
v_kenmerkdeel_waarde VARCHAR2 (1000);
v_charnum NUMBER (10);
v_uniek NUMBER (10);
v_newid VARCHAR2 (200);
BEGIN
FOR rec IN rc
LOOP
BEGIN
v_aanduiding :=
'['
|| TO_CHAR (rec.cur_srtdeel_key)
|| '|'
|| rec.cur_srtdeel_oms
|| '->'
|| TO_CHAR (rec.new_srtdeel_key)
|| '|'
|| rec.new_srtdeel_oms
|| '] ';
v_skip := FALSE;
IF (rec.cur_srtdeel_oms IS NULL OR rec.new_srtdeel_oms IS NULL)
THEN
fac.imp_writelog (p_import_key,
'W',
v_aanduiding,
'Soort-key(s) ongedefinieerd!');
COMMIT;
ELSIF (rec.cur_srtgroep_key != rec.new_srtgroep_key)
THEN
fac.imp_writelog (p_import_key,
'W',
v_aanduiding,
'Soort-key(s) niet onder dezelfde groep-key!');
COMMIT;
ELSE -- Geldige soort-keys onder dezelfde groep-key!
-- 1: Hang controles om (ongeacht de periode).
-- BELANGRIJK: Dit moet als eerste stap, want als geen best-fit
-- kan worden bepaald, dan worden de volgende stappen
-- ook overgeslagen en wordt deze objectsoort (en wat
-- daarmee samenhangt) dus niet omgekat!
FOR cc -- Actuele en verwijderde!
IN ( SELECT a.cur_srtcontrole_key,
a.cur_srtcontrole_oms,
b.bnew_srtcontrole_key,
b.bnew_srtcontrole_oms
FROM (SELECT ins_srtcontrole_key
cur_srtcontrole_key,
ins_srtcontrole_omschrijving
cur_srtcontrole_oms,
ins_srtcontrole_periode
cur_srtcontrole_periode
FROM ins_srtcontrole
WHERE ins_srtinstallatie_key =
rec.cur_srtdeel_key
AND ins_srtcontrole_niveau = 'S') a
LEFT JOIN
(SELECT sc.ins_srtcontrole_key
bnew_srtcontrole_key,
sc.ins_srtcontrole_omschrijving
bnew_srtcontrole_oms,
sc.ins_srtcontrole_periode
bnew_srtcontrole_periode
FROM ins_srtcontrole sc
WHERE sc.ins_srtinstallatie_key =
rec.new_srtdeel_key
AND sc.ins_srtcontrole_niveau = 'S'
AND NOT EXISTS
(SELECT 1
FROM ins_srtcontrole
WHERE ins_srtinstallatie_key =
sc.ins_srtinstallatie_key
AND ins_srtcontrole_niveau =
'S'
AND ins_srtcontrole_periode =
sc.ins_srtcontrole_periode
AND ins_srtcontrole_key <
sc.ins_srtcontrole_key))
b -- best-fit
ON a.cur_srtcontrole_periode =
b.bnew_srtcontrole_periode
LEFT JOIN
(SELECT sc.ins_srtcontrole_key
rnew_srtcontrole_key,
sc.ins_srtcontrole_omschrijving
rnew_srtcontrole_oms,
sc.ins_srtcontrole_periode
rnew_srtcontrole_periode
FROM ins_srtcontrole sc
WHERE sc.ins_srtinstallatie_key =
rec.new_srtdeel_key
AND sc.ins_srtcontrole_niveau = 'S'
AND NOT EXISTS
(SELECT 1
FROM ins_srtcontrole
WHERE ins_srtinstallatie_key =
sc.ins_srtinstallatie_key
AND ins_srtcontrole_niveau =
'S'
AND ins_srtcontrole_key <
sc.ins_srtcontrole_key))
c -- random-fit (doen we niet!)
ON 1 = 1
ORDER BY b.bnew_srtcontrole_key DESC) -- NULLS first, want dan EXIT!
LOOP
IF (cc.bnew_srtcontrole_key IS NULL)
THEN
fac.imp_writelog (
p_import_key,
'W',
v_aanduiding,
'Controles niet omgehangen ['
|| TO_CHAR (cc.cur_srtcontrole_key)
|| '|'
|| cc.cur_srtcontrole_oms
|| ']'
);
COMMIT;
v_skip := TRUE;
EXIT; -- Skip het omhangen van evt. nog andere controles en de rest!
ELSE
v_errormsg := 'Fout omhangen controles';
-- Hang controle om!
UPDATE ins_deelsrtcontrole
SET ins_srtcontrole_key = cc.bnew_srtcontrole_key
WHERE ins_srtcontrole_key = cc.cur_srtcontrole_key;
fac.imp_writelog (
p_import_key,
'I',
v_aanduiding,
'Controles omgehangen ['
|| TO_CHAR (cc.cur_srtcontrole_key)
|| '|'
|| cc.cur_srtcontrole_oms
|| '->'
|| TO_CHAR (cc.bnew_srtcontrole_key)
|| '|'
|| cc.bnew_srtcontrole_oms
|| ']'
);
COMMIT;
END IF;
END LOOP;
IF (v_skip = FALSE) -- Nu kan het niet meer mis gaan...
THEN
-- 2: Zorg dat de doel-soort dezelde kenmerken heeft als de bron-
-- soort!
FOR ck -- Actuele en verwijderde!
IN ( SELECT DISTINCT
k.ins_kenmerk_key cur_kenmerk_key,
k.ins_kenmerk_volgnummer cur_kenmerk_volgnr,
k.ins_srtkenmerk_key cur_srtkenmerk_key,
sk.ins_srtkenmerk_omschrijving cur_srtkenmerk_oms
FROM ins_kenmerk k,
(SELECT sk.*
FROM ins_kenmerk k, ins_srtkenmerk sk
WHERE k.ins_srtinstallatie_key =
rec.cur_srtdeel_key
AND k.ins_kenmerk_niveau = 'S'
AND k.ins_srtkenmerk_key =
sk.ins_srtkenmerk_key
MINUS
SELECT sk.*
FROM ins_kenmerk k, ins_srtkenmerk sk
WHERE k.ins_srtinstallatie_key =
rec.new_srtdeel_key
AND k.ins_kenmerk_niveau = 'S'
AND k.ins_srtkenmerk_key =
sk.ins_srtkenmerk_key) sk
WHERE k.ins_srtinstallatie_key = rec.cur_srtdeel_key
AND k.ins_kenmerk_niveau = 'S'
AND k.ins_srtkenmerk_key = sk.ins_srtkenmerk_key
ORDER BY k.ins_kenmerk_volgnummer)
LOOP
v_errormsg :=
'Fout toevoegen kenmerk ['
|| ck.cur_srtkenmerk_oms
|| ']';
INSERT INTO ins_kenmerk (ins_srtkenmerk_key,
ins_srtinstallatie_key,
ins_kenmerk_niveau,
ins_kenmerk_volgnummer)
VALUES (ck.cur_srtkenmerk_key,
rec.new_srtdeel_key,
'S',
ck.cur_kenmerk_volgnr);
fac.imp_writelog (
p_import_key,
'I',
v_aanduiding,
'Kenmerk aangemaakt ['
|| TO_CHAR (rec.new_srtdeel_key)
|| '|'
|| ck.cur_srtkenmerk_oms
|| ']'
);
COMMIT;
END LOOP;
-- 3: Hang de bron-kenmerken om (naar de doel-kenmerken)!
FOR ck -- Actuele en verwijderde!
IN ( SELECT a.cur_kenmerk_key,
a.cur_kenmerk_volgnr,
a.ins_srtkenmerk_oms,
b.new_kenmerk_key
FROM (SELECT DISTINCT
k.ins_kenmerk_key cur_kenmerk_key,
k.ins_kenmerk_volgnummer
cur_kenmerk_volgnr,
k.ins_srtkenmerk_key
cur_srtkenmerk_key,
sk.ins_srtkenmerk_omschrijving
ins_srtkenmerk_oms
FROM ins_kenmerk k, ins_srtkenmerk sk
WHERE k.ins_srtinstallatie_key =
rec.cur_srtdeel_key
AND k.ins_kenmerk_niveau = 'S'
AND k.ins_srtkenmerk_key =
sk.ins_srtkenmerk_key) a
LEFT JOIN
(SELECT DISTINCT
k.ins_kenmerk_key new_kenmerk_key,
k.ins_srtkenmerk_key
new_srtkenmerk_key
FROM ins_kenmerk k
WHERE k.ins_srtinstallatie_key =
rec.new_srtdeel_key
AND k.ins_kenmerk_niveau = 'S') b
ON a.cur_srtkenmerk_key = b.new_srtkenmerk_key
ORDER BY a.cur_kenmerk_volgnr)
LOOP
v_errormsg :=
'Fout omhangen kenmerkwaarden ['
|| ck.ins_srtkenmerk_oms
|| ']';
-- Hang de bron-kenmerken om!
UPDATE ins_kenmerkdeel
SET ins_kenmerk_key = ck.new_kenmerk_key -- Doel-kenmerk
WHERE ins_kenmerk_key = ck.cur_kenmerk_key; -- Bron-kenmerk
COMMIT;
END LOOP;
v_count_upd := 0;
-- 4: Voeg de soort-oms na de 1e spatie toe in TYPE-kenmerk (en
-- maak deze aan als deze nog niet bestaat), zorg dat de object-id
-- ook uniek is onder de doel-soort en hang object om.
FOR cd
IN ( SELECT ins_deel_key,
ins_deel_omschrijving,
ins_deel_verwijder
FROM ins_deel
WHERE ins_srtdeel_key = rec.cur_srtdeel_key
ORDER BY ins_deel_key)
LOOP
-- 4a. Voeg de soort-oms na de 1e spatie toe in TYPE-kenmerk
-- (en maak deze aan als deze nog niet bestaat).
v_errormsg := 'Fout bepalen TYPE-kenmerkwaarde';
SELECT COUNT ( * ),
MAX (kd.ins_kenmerkdeel_key),
MAX (TRIM (kd.ins_kenmerkdeel_waarde))
INTO v_count, v_kenmerkdeel_key, v_kenmerkdeel_waarde
FROM ins_kenmerkdeel kd, ins_kenmerk k
WHERE kd.ins_deel_key = cd.ins_deel_key
AND kd.ins_kenmerk_key = k.ins_kenmerk_key
AND k.ins_srtkenmerk_key = c_type_srtkey;
IF (v_count = 0)
THEN
v_errormsg := 'Fout bepalen TYPE-kenmerk';
SELECT ins_kenmerk_key
INTO v_kenmerk_key -- Doel-kenmerk (zie ook stap 2)
FROM ins_kenmerk
WHERE ins_srtinstallatie_key = rec.new_srtdeel_key
AND ins_srtkenmerk_key = c_type_srtkey
AND ins_kenmerk_niveau = 'S';
v_errormsg := 'Fout toevoegen TYPE-kenmerkwaarde';
INSERT INTO ins_kenmerkdeel (
ins_deel_key,
ins_kenmerk_key,
ins_kenmerkdeel_waarde
)
VALUES (
cd.ins_deel_key,
v_kenmerk_key,
SUBSTR (
'['
|| rec.cur_objectsoort_postfix
|| ']',
1,
50
)
);
ELSE
-- In stap 3 zijn alle kenmerkwaarden reeds omgehangen (de
-- kenmerk_key hoeft dus niet meer te worden gewijzigd)!
v_errormsg := 'Fout bijwerken TYPE-kenmerkwaarde';
UPDATE ins_kenmerkdeel
SET ins_kenmerkdeel_waarde =
SUBSTR (
v_kenmerkdeel_waarde
|| ' ['
|| rec.cur_objectsoort_postfix
|| ']',
1,
50
)
WHERE ins_kenmerkdeel_key = v_kenmerkdeel_key;
END IF;
COMMIT;
-- 4b. Zorg dat de object-id ook uniek is onder de doel-soort
-- (zoniet, dan toevoeging A, B, C, etc.) en hang object om.
v_charnum := 64; -- Letter '@' (de letter VOOR de letter 'A')!
v_uniek := 0;
v_newid := cd.ins_deel_omschrijving;
IF (cd.ins_deel_verwijder IS NULL)
THEN
LOOP
SELECT COUNT ( * )
INTO v_count
FROM ins_v_aanwezigdeel
WHERE ins_srtdeel_key = rec.new_srtdeel_key
AND ins_deel_omschrijving = v_newid;
IF (v_count = 0)
THEN
v_uniek := 1;
ELSE
v_charnum := v_charnum + 1;
v_newid :=
SUBSTR (cd.ins_deel_omschrijving, 1, 59)
|| CHR (v_charnum);
END IF;
EXIT WHEN (v_charnum > c_charnum_z OR v_uniek = 1);
END LOOP;
ELSE
-- Onderstaande loop over verwijderde objecten lijkt
-- overdreven, maar toch bleken er tijdens test ineens 2
-- in dezelfde seconde verwijderde objecten met dezelfde
-- ID/omschrijving te bestaan (op dezelfde locatie)!!!
LOOP
SELECT COUNT ( * )
INTO v_count
FROM ins_deel
WHERE ins_deel_verwijder = cd.ins_deel_verwijder
AND ins_srtdeel_key = rec.new_srtdeel_key
AND ins_deel_omschrijving = v_newid;
IF (v_count = 0)
THEN
v_uniek := 1;
ELSE
v_charnum := v_charnum + 1;
v_newid :=
SUBSTR (cd.ins_deel_omschrijving, 1, 59)
|| CHR (v_charnum);
END IF;
EXIT WHEN (v_charnum > c_charnum_z OR v_uniek = 1);
END LOOP;
END IF;
IF (v_uniek = 1)
THEN
v_errormsg := 'Fout omhangen object';
-- Hang object om!
UPDATE ins_deel
SET ins_srtdeel_key = rec.new_srtdeel_key,
ins_deel_omschrijving = v_newid
WHERE ins_deel_key = cd.ins_deel_key;
v_count_upd := v_count_upd + 1;
ELSE
fac.imp_writelog (
p_import_key,
'W',
v_aanduiding,
'Object niet omgehangen ['
|| cd.ins_deel_omschrijving
|| ']'
);
END IF;
COMMIT;
END LOOP;
fac.imp_writelog (
p_import_key,
'S',
v_aanduiding
|| '#objecten omgehangen: '
|| TO_CHAR (v_count_upd),
''
);
COMMIT;
END IF;
END IF;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
v_errormsg :=
v_errormsg
|| ' ORACLE (error '
|| oracle_err_num
|| '/'
|| oracle_err_mes
|| ')';
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || v_errormsg,
'');
END;
END LOOP;
-- Verwijder "lege" objectsoort-controles!
v_errormsg := 'Fout bij schonen controles';
SELECT COUNT ( * )
INTO v_count
FROM ins_srtcontrole sc
WHERE sc.ins_srtcontrole_niveau = 'S'
AND NOT EXISTS
(SELECT 1
FROM ins_deelsrtcontrole
WHERE ins_srtcontrole_key = sc.ins_srtcontrole_key)
AND NOT EXISTS
(SELECT 1
FROM ins_deel
WHERE ins_srtdeel_key = sc.ins_srtinstallatie_key);
DELETE FROM ins_srtcontrole sc
WHERE sc.ins_srtcontrole_niveau = 'S'
AND NOT EXISTS
(SELECT 1
FROM ins_deelsrtcontrole
WHERE ins_srtcontrole_key = sc.ins_srtcontrole_key)
AND NOT EXISTS
(SELECT 1
FROM ins_deel
WHERE ins_srtdeel_key = sc.ins_srtinstallatie_key);
fac.imp_writelog (p_import_key,
'S',
'#controles geschoond: ' || TO_CHAR (v_count),
'');
COMMIT;
-- Verwijder "lege" objectsoorten uit scope bij contracten!
v_errormsg := 'Fout bij schonen contracten';
SELECT COUNT (DISTINCT co.cnt_contract_key)
INTO v_count
FROM cnt_contract_object co
WHERE co.cnt_contract_object_verwijder IS NULL
AND NOT EXISTS
(SELECT 1
FROM ins_deel
WHERE ins_srtdeel_key = co.cnt_ins_srtdeel_key);
UPDATE cnt_contract_object co
SET co.cnt_contract_object_verwijder = SYSDATE
WHERE co.cnt_contract_object_verwijder IS NULL
AND NOT EXISTS
(SELECT 1
FROM ins_deel
WHERE ins_srtdeel_key = co.cnt_ins_srtdeel_key);
fac.imp_writelog (p_import_key,
'S',
'#contracten geschoond: ' || TO_CHAR (v_count),
'');
COMMIT;
-- Verwijder "lege" objectsoort-kenmerken!
v_errormsg := 'Fout bij schonen kenmerken';
SELECT COUNT ( * )
INTO v_count
FROM ins_kenmerk k
WHERE k.ins_kenmerk_verwijder IS NULL AND k.ins_kenmerk_niveau = 'S'
AND NOT EXISTS
(SELECT 1
FROM ins_deel
WHERE ins_srtdeel_key = k.ins_srtinstallatie_key);
UPDATE ins_kenmerk k
SET k.ins_kenmerk_verwijder = SYSDATE
WHERE k.ins_kenmerk_verwijder IS NULL AND k.ins_kenmerk_niveau = 'S'
AND NOT EXISTS
(SELECT 1
FROM ins_deel
WHERE ins_srtdeel_key = k.ins_srtinstallatie_key);
fac.imp_writelog (p_import_key,
'S',
'#kenmerken geschoond: ' || TO_CHAR (v_count),
'');
COMMIT;
-- Verwijder "lege" objectsoorten!
v_errormsg := 'Fout bij schonen objectsoorten';
SELECT COUNT ( * )
INTO v_count
FROM ins_srtdeel sd
WHERE sd.ins_srtdeel_verwijder IS NULL
AND NOT EXISTS (SELECT 1
FROM ins_deel
WHERE ins_srtdeel_key = sd.ins_srtdeel_key);
UPDATE ins_srtdeel sd
SET ins_srtdeel_verwijder = SYSDATE
WHERE sd.ins_srtdeel_verwijder IS NULL
AND NOT EXISTS (SELECT 1
FROM ins_deel
WHERE ins_srtdeel_key = sd.ins_srtdeel_key);
fac.imp_writelog (p_import_key,
'S',
'#objectsoorten geschoond: ' || TO_CHAR (v_count),
'');
COMMIT;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
v_errormsg :=
v_errormsg
|| ' ORACLE (error '
|| oracle_err_num
|| '/'
|| oracle_err_mes
|| ')';
fac.imp_writelog (p_import_key,
'E',
v_aanduiding || v_errormsg,
'Importproces SRTDEEL_SWAP afgebroken!');
END conn_update_srtdeel_swap;
/
-- BASW-export; eporteer de afgemelde opdrachten (sinds de laatste keer) en
-- markeer deze vervolgens als 'ORDAFM-doorgezet' (= hidden kenmerk)!
/* Formatted on 26-4-2012 11:32:24 (QP5 v5.115.810.9015) */