PNBR#72493 IMPORT_VM faalt elke nacht

svn path=/Customer/trunk/; revision=61902
This commit is contained in:
Suzan Wiegerinck
2023-09-26 17:14:19 +00:00
parent 720193db2a
commit 1e4b9e39f0

View File

@@ -3115,267 +3115,6 @@ AS
AND a10.prs_afdeling_parentkey = a9.prs_afdeling_key
AND a1.prs_afdeling_parentkey IS NULL;
-- import om objectinformatie via de api in te lezen
CREATE OR REPLACE PROCEDURE pnbr_import_ins_mut (p_import_key IN NUMBER)
AS
BEGIN
fac_import_ins (p_import_key);
END;
/
CREATE OR REPLACE PROCEDURE pnbr_update_ins_mut (p_import_key IN NUMBER)
AS
CURSOR c IS
SELECT (SELECT MAX (ins_deel_key)
FROM ins_v_aanwezigdeel ad
WHERE UPPER (ad.ins_deel_omschrijving) =
UPPER (i.ins_deel_omschrijving)) ins_deel_key,
i.*
FROM fac_imp_ins i;
CURSOR c_del IS
SELECT d.ins_deel_key
FROM ins_v_deel_gegevens ad, ins_deel d
WHERE ad.ins_deel_key = d.ins_deel_key
AND COALESCE (d.ins_deel_vervaldatum, SYSDATE + 1) > SYSDATE
-- Het betreffende object komt niet meer voor in het importbestand
AND NOT EXISTS
(SELECT ins_deel_omschrijving
FROM fac_imp_ins i
WHERE UPPER (i.ins_deel_omschrijving) =
UPPER (ad.ins_deel_omschrijving))
-- En het importbestand bevat objecten van dit objectsoort.
AND (SELECT COUNT (*)
FROM fac_imp_ins
WHERE UPPER (ins_srtdeel_omschrijving) =
ad.ins_srtdeel_upper) >
0;
PROCEDURE log_inskenmerk (p_import_key IN NUMBER,
p_str IN VARCHAR2,
p_deel_key IN NUMBER)
AS
v_srtkenmerk_key ins_srtkenmerk.ins_srtkenmerk_key%TYPE;
v_kenmerk_key ins_kenmerk.ins_kenmerk_key%TYPE;
v_waarde_new ins_kenmerkdeel.ins_kenmerkdeel_waarde%TYPE;
v_kenmerk_type ins_srtkenmerk.ins_srtkenmerk_kenmerktype%TYPE;
v_srtkenmerk_omschrijving ins_srtkenmerk.ins_srtkenmerk_omschrijving%TYPE;
v_waarde_old ins_kenmerkdeel.ins_kenmerkdeel_waarde%TYPE;
v_kenmerkdomein_key fac_kenmerkdomein.fac_kenmerkdomein_key%TYPE;
v_kenmerk_niveau ins_kenmerk.ins_kenmerk_niveau%TYPE;
v_kenmerkdeel_key ins_kenmerkdeel.ins_kenmerkdeel_key%TYPE;
v_srtnotificatie_key fac_srtnotificatie.fac_srtnotificatie_key%TYPE;
v_log imp_log.imp_log_omschrijving%TYPE;
v_errormsg VARCHAR2 (200);
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
BEGIN
IF p_str IS NOT NULL AND INSTR (p_str, '=') > 1
THEN
v_srtkenmerk_omschrijving := SUBSTR (p_str, 1, INSTR (p_str, '|') - 1);
SELECT ins_srtkenmerk_key
INTO v_srtkenmerk_key
FROM ins_srtkenmerk
WHERE ins_srtkenmerk_verwijder IS NULL
AND ins_srtkenmerk_upper = UPPER(v_srtkenmerk_omschrijving);
v_waarde_new := SUBSTR (p_str, INSTR (p_str, '=') + 1, 100);
-- vind de bijbehorende kenmerk key
SELECT k.ins_kenmerk_key, k.ins_kenmerk_niveau
INTO v_kenmerk_key, v_kenmerk_niveau
FROM ins_kenmerk k, ins_v_deel_gegevens dg
WHERE ins_srtkenmerk_key = v_srtkenmerk_key
AND dg.ins_deel_key = p_deel_key
AND ( ( k.ins_kenmerk_niveau = 'S'
AND k.ins_srtinstallatie_key = dg.ins_srtdeel_key)
OR ( k.ins_kenmerk_niveau = 'G'
AND k.ins_srtinstallatie_key =
dg.ins_srtgroep_key)
OR ( k.ins_kenmerk_niveau = 'D'
AND k.ins_srtinstallatie_key =
dg.ins_discipline_key));
-- vind de srtkenmerkgegevens die nodig zijn om de waarde te bepalen en de naam van het kenmerk in de log op te nemen.
SELECT sk.ins_srtkenmerk_kenmerktype,
sk.fac_kenmerkdomein_key,
sk.ins_srtkenmerk_omschrijving
INTO v_kenmerk_type,
v_kenmerkdomein_key,
v_srtkenmerk_omschrijving
FROM ins_srtkenmerk sk
WHERE sk.ins_srtkenmerk_key = v_srtkenmerk_key;
BEGIN
SELECT ikd.ins_kenmerkdeel_waarde, ikd.ins_kenmerkdeel_key
INTO v_waarde_old, v_kenmerkdeel_key
FROM ins_kenmerkdeel ikd
WHERE ikd.ins_deel_key = p_deel_key
AND ikd.ins_kenmerkdeel_verwijder IS NULL
AND ikd.ins_kenmerk_key = v_kenmerk_key;
IF v_kenmerk_type = 'R' OR v_kenmerk_type = 'S'
THEN
v_waarde_old :=
fac.getdomeinwaarde (v_kenmerkdomein_key,
v_waarde_old);
ELSIF v_kenmerk_type = 'D'
THEN
v_waarde_old :=
TO_CHAR (
fac.safe_to_date (v_waarde_old, 'dd-mm-yyyy'),
'yyyy-mm-dd');
ELSIF v_kenmerk_type = 'N'
THEN
v_waarde_old :=
TO_CHAR (fac.safe_to_number (v_waarde_old));
END IF;
EXCEPTION
WHEN NO_DATA_FOUND
THEN
v_waarde_old := NULL;
v_kenmerkdeel_key := NULL;
END;
v_waarde_old := COALESCE (v_waarde_old, '(leeg)');
v_waarde_new := COALESCE (v_waarde_new, '(leeg)');
IF v_waarde_old <> v_waarde_new
THEN
v_log :=
v_srtkenmerk_omschrijving
|| ': '
|| v_waarde_old
|| ' --> '
|| v_waarde_new;
SELECT fac_srtnotificatie_key
INTO v_srtnotificatie_key
FROM fac_srtnotificatie
WHERE fac_srtnotificatie_code = 'INSUPD';
INSERT INTO fac_tracking (fac_srtnotificatie_key,
fac_tracking_refkey,
fac_tracking_oms)
VALUES (v_srtnotificatie_key, p_deel_key, v_log);
IF v_waarde_new = '(leeg)'
THEN
-- kenmerken worden (nog) niet verwijderd in de fac_update_ins routine
DELETE ins_kenmerkdeel
WHERE ins_kenmerkdeel_key = v_kenmerkdeel_key;
END IF;
END IF;
END IF;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
v_errormsg :=
' ORACLE (error '
|| oracle_err_num
|| '/'
|| oracle_err_mes
|| ')';
fac.imp_writelog (
p_import_key,
'W',
'Kenmerkwijziging kon niet gelogd worden. ' || v_errormsg,
'Deel_key:' || p_deel_key || ' String:' || p_str);
END;
BEGIN
FOR rec IN c
LOOP
log_inskenmerk (p_import_key,
rec.ins_kenmerkwaarde1,
rec.ins_deel_key);
log_inskenmerk (p_import_key,
rec.ins_kenmerkwaarde2,
rec.ins_deel_key);
log_inskenmerk (p_import_key,
rec.ins_kenmerkwaarde3,
rec.ins_deel_key);
log_inskenmerk (p_import_key,
rec.ins_kenmerkwaarde4,
rec.ins_deel_key);
log_inskenmerk (p_import_key,
rec.ins_kenmerkwaarde5,
rec.ins_deel_key);
log_inskenmerk (p_import_key,
rec.ins_kenmerkwaarde6,
rec.ins_deel_key);
log_inskenmerk (p_import_key,
rec.ins_kenmerkwaarde7,
rec.ins_deel_key);
log_inskenmerk (p_import_key,
rec.ins_kenmerkwaarde8,
rec.ins_deel_key);
log_inskenmerk (p_import_key,
rec.ins_kenmerkwaarde9,
rec.ins_deel_key);
log_inskenmerk (p_import_key,
rec.ins_kenmerkwaarde10,
rec.ins_deel_key);
log_inskenmerk (p_import_key,
rec.ins_kenmerkwaarde11,
rec.ins_deel_key);
log_inskenmerk (p_import_key,
rec.ins_kenmerkwaarde12,
rec.ins_deel_key);
log_inskenmerk (p_import_key,
rec.ins_kenmerkwaarde13,
rec.ins_deel_key);
log_inskenmerk (p_import_key,
rec.ins_kenmerkwaarde14,
rec.ins_deel_key);
log_inskenmerk (p_import_key,
rec.ins_kenmerkwaarde15,
rec.ins_deel_key);
log_inskenmerk (p_import_key,
rec.ins_kenmerkwaarde16,
rec.ins_deel_key);
log_inskenmerk (p_import_key,
rec.ins_kenmerkwaarde17,
rec.ins_deel_key);
log_inskenmerk (p_import_key,
rec.ins_kenmerkwaarde18,
rec.ins_deel_key);
log_inskenmerk (p_import_key,
rec.ins_kenmerkwaarde19,
rec.ins_deel_key);
log_inskenmerk (p_import_key,
rec.ins_kenmerkwaarde20,
rec.ins_deel_key);
END LOOP;
fac_update_ins (p_import_key);
-- fac_update_ins maakt tracking aan voor alle elementen die al in de lijst voorkomen.
-- deze tracking is verwarrend en gaan we verwijderen. De tracking is te herkennen aan het feit
-- dat er geen omschrijving bij staat.
DELETE fac_tracking t
WHERE fac_srtnotificatie_key IN
(SELECT fac_srtnotificatie_key
FROM fac_srtnotificatie
WHERE fac_srtnotificatie_code = 'INSUPD')
AND fac_tracking_oms IS NULL
AND TRUNC (fac_tracking_datum) = TRUNC (SYSDATE);
-- Verwijder elementen die niet meer voorkomen in de import
FOR rec IN c_del
LOOP
UPDATE ins_deel
SET ins_deel_vervaldatum = SYSDATE
WHERE ins_deel_key = rec.ins_deel_key;
END LOOP;
END;
/
/*
CREATE OR REPLACE PROCEDURE pnbr_import_mjob (p_import_key IN NUMBER)
AS