INLO#75568 Kenmerken import bij personen werkt niet

svn path=/Database/trunk/; revision=58241
This commit is contained in:
Erik Groener
2022-12-06 08:46:05 +00:00
parent ad5d2d2f26
commit 6ac12c8e6f

View File

@@ -934,6 +934,26 @@ AS
v_prs_kenmerk18 VARCHAR2 (256);
v_prs_kenmerk19 VARCHAR2 (256);
v_prs_kenmerk20 VARCHAR2 (256);
v_prs_kenmerk_key1 VARCHAR2 (255);
v_prs_kenmerk_key2 VARCHAR2 (255);
v_prs_kenmerk_key3 VARCHAR2 (255);
v_prs_kenmerk_key4 VARCHAR2 (255);
v_prs_kenmerk_key5 VARCHAR2 (255);
v_prs_kenmerk_key6 VARCHAR2 (255);
v_prs_kenmerk_key7 VARCHAR2 (255);
v_prs_kenmerk_key8 VARCHAR2 (255);
v_prs_kenmerk_key9 VARCHAR2 (255);
v_prs_kenmerk_key10 VARCHAR2 (255);
v_prs_kenmerk_key11 VARCHAR2 (255);
v_prs_kenmerk_key12 VARCHAR2 (255);
v_prs_kenmerk_key13 VARCHAR2 (255);
v_prs_kenmerk_key14 VARCHAR2 (255);
v_prs_kenmerk_key15 VARCHAR2 (255);
v_prs_kenmerk_key16 VARCHAR2 (255);
v_prs_kenmerk_key17 VARCHAR2 (255);
v_prs_kenmerk_key18 VARCHAR2 (255);
v_prs_kenmerk_key19 VARCHAR2 (255);
v_prs_kenmerk_key20 VARCHAR2 (255);
v_alg_verdieping_volgnr_num NUMBER;
v_prs_werkplek_volgnr_num NUMBER;
v_prs_perslid_dienstv_num NUMBER;
@@ -952,6 +972,46 @@ AS
WHERE fac_import_key = p_import_key
ORDER BY fac_imp_file_index;
FUNCTION bepaal_kenmerk_key (kw IN VARCHAR)
RETURN NUMBER
IS
v_kenmerk_key NUMBER;
BEGIN
IF fac.safe_to_number (kw) IS NULL
THEN -- kenmerkwaarde is alfanumeriek (dus omschrijving)!
SELECT prs_kenmerk_key
INTO v_kenmerk_key
FROM prs_kenmerk
WHERE prs_kenmerk_upper = UPPER (kw)
AND prs_kenmerk_verwijder IS NULL
AND prs_kenmerk_kenmerktype IN ('C', 'D', 'N', 'R', 'S', 'X', 'B', 'V');
ELSE -- kenmerkwaarde is numeriek (dus key)!
SELECT prs_kenmerk_key
INTO v_kenmerk_key
FROM prs_kenmerk
WHERE prs_kenmerk_key = fac.safe_to_number (kw)
AND prs_kenmerk_verwijder IS NULL
AND prs_kenmerk_kenmerktype IN ('C', 'D', 'N', 'R', 'S', 'X', 'B', 'V');
END IF;
RETURN v_kenmerk_key;
EXCEPTION
WHEN NO_DATA_FOUND
THEN
IF kw IS NULL OR UPPER (kw) LIKE 'KENMERK%'
THEN
RETURN NULL;
ELSE
fac.imp_writelog (p_import_key,
'W',
'Fout bij bepalen kenmerk [' || kw || ']',
'Bestaat niet of type ongeldig');
COMMIT;
RETURN NULL;
END IF;
END;
BEGIN
-- JGL: Ik zou graag een WHERE fac_import_key = p_import_key hieronder
-- toevoegen zodat het script ook multi-user veilig is,
@@ -973,7 +1033,7 @@ AS
FOR v_index IN 1 .. 46
LOOP
v_colnr.EXTEND;
-- De volgorde de te importeren kolommen in de CSV uitlezen uit v_seq_of_columns
-- De volgorde van de te importeren kolommen in de CSV uitlezen uit v_seq_of_columns
-- De field delimiter is hier altijd ";"
fac.imp_getfield (v_seq_of_columns,
';',
@@ -1004,6 +1064,47 @@ AS
IF UPPER(v_newline) LIKE UPPER(v_lim_header)
THEN
fac.imp_getfield_nr(v_newline, v_fielddelimitor, 27, v_prs_kenmerk1);
fac.imp_getfield_nr(v_newline, v_fielddelimitor, 28, v_prs_kenmerk2);
fac.imp_getfield_nr(v_newline, v_fielddelimitor, 29, v_prs_kenmerk3);
fac.imp_getfield_nr(v_newline, v_fielddelimitor, 30, v_prs_kenmerk4);
fac.imp_getfield_nr(v_newline, v_fielddelimitor, 31, v_prs_kenmerk5);
fac.imp_getfield_nr(v_newline, v_fielddelimitor, 32, v_prs_kenmerk6);
fac.imp_getfield_nr(v_newline, v_fielddelimitor, 33, v_prs_kenmerk7);
fac.imp_getfield_nr(v_newline, v_fielddelimitor, 34, v_prs_kenmerk8);
fac.imp_getfield_nr(v_newline, v_fielddelimitor, 35, v_prs_kenmerk9);
fac.imp_getfield_nr(v_newline, v_fielddelimitor, 36, v_prs_kenmerk10);
fac.imp_getfield_nr(v_newline, v_fielddelimitor, 37, v_prs_kenmerk11);
fac.imp_getfield_nr(v_newline, v_fielddelimitor, 38, v_prs_kenmerk12);
fac.imp_getfield_nr(v_newline, v_fielddelimitor, 39, v_prs_kenmerk13);
fac.imp_getfield_nr(v_newline, v_fielddelimitor, 40, v_prs_kenmerk14);
fac.imp_getfield_nr(v_newline, v_fielddelimitor, 41, v_prs_kenmerk15);
fac.imp_getfield_nr(v_newline, v_fielddelimitor, 42, v_prs_kenmerk16);
fac.imp_getfield_nr(v_newline, v_fielddelimitor, 43, v_prs_kenmerk17);
fac.imp_getfield_nr(v_newline, v_fielddelimitor, 44, v_prs_kenmerk18);
fac.imp_getfield_nr(v_newline, v_fielddelimitor, 45, v_prs_kenmerk19);
fac.imp_getfield_nr(v_newline, v_fielddelimitor, 46, v_prs_kenmerk20);
v_prs_kenmerk_key1 := bepaal_kenmerk_key (v_prs_kenmerk1);
v_prs_kenmerk_key2 := bepaal_kenmerk_key (v_prs_kenmerk2);
v_prs_kenmerk_key3 := bepaal_kenmerk_key (v_prs_kenmerk3);
v_prs_kenmerk_key4 := bepaal_kenmerk_key (v_prs_kenmerk4);
v_prs_kenmerk_key5 := bepaal_kenmerk_key (v_prs_kenmerk5);
v_prs_kenmerk_key6 := bepaal_kenmerk_key (v_prs_kenmerk6);
v_prs_kenmerk_key7 := bepaal_kenmerk_key (v_prs_kenmerk7);
v_prs_kenmerk_key8 := bepaal_kenmerk_key (v_prs_kenmerk8);
v_prs_kenmerk_key9 := bepaal_kenmerk_key (v_prs_kenmerk9);
v_prs_kenmerk_key10 := bepaal_kenmerk_key (v_prs_kenmerk10);
v_prs_kenmerk_key11 := bepaal_kenmerk_key (v_prs_kenmerk11);
v_prs_kenmerk_key12 := bepaal_kenmerk_key (v_prs_kenmerk12);
v_prs_kenmerk_key13 := bepaal_kenmerk_key (v_prs_kenmerk13);
v_prs_kenmerk_key14 := bepaal_kenmerk_key (v_prs_kenmerk14);
v_prs_kenmerk_key15 := bepaal_kenmerk_key (v_prs_kenmerk15);
v_prs_kenmerk_key16 := bepaal_kenmerk_key (v_prs_kenmerk16);
v_prs_kenmerk_key17 := bepaal_kenmerk_key (v_prs_kenmerk17);
v_prs_kenmerk_key18 := bepaal_kenmerk_key (v_prs_kenmerk18);
v_prs_kenmerk_key19 := bepaal_kenmerk_key (v_prs_kenmerk19);
v_prs_kenmerk_key20 := bepaal_kenmerk_key (v_prs_kenmerk20);
v_header_is_valid := 1;
END IF;
ELSE
@@ -1658,7 +1759,6 @@ AS
v_errorhint := 'Ongeldig wachtwoord';
v_prs_perslid_wachtwoord := TRIM (v_prs_perslid_wachtwoord);
--
-- Insert geformatteerde import record
IF v_ongeldig = 0
@@ -1741,26 +1841,26 @@ AS
v_prs_perslid_wachtwoord,
v_prs_perslid_titel,
v_prs_perslid_apikey,
v_prs_kenmerk1,
v_prs_kenmerk2,
v_prs_kenmerk3,
v_prs_kenmerk4,
v_prs_kenmerk5,
v_prs_kenmerk6,
v_prs_kenmerk7,
v_prs_kenmerk8,
v_prs_kenmerk9,
v_prs_kenmerk10,
v_prs_kenmerk11,
v_prs_kenmerk12,
v_prs_kenmerk13,
v_prs_kenmerk14,
v_prs_kenmerk15,
v_prs_kenmerk16,
v_prs_kenmerk17,
v_prs_kenmerk18,
v_prs_kenmerk19,
v_prs_kenmerk20,
DECODE(v_prs_kenmerk_key1, NULL, v_prs_kenmerk1, TO_CHAR(v_prs_kenmerk_key1) || '=' || SUBSTR(v_prs_kenmerk1, 1, 200)),
DECODE(v_prs_kenmerk_key2, NULL, v_prs_kenmerk2, TO_CHAR(v_prs_kenmerk_key2) || '=' || SUBSTR(v_prs_kenmerk2, 1, 200)),
DECODE(v_prs_kenmerk_key3, NULL, v_prs_kenmerk3, TO_CHAR(v_prs_kenmerk_key3) || '=' || SUBSTR(v_prs_kenmerk3, 1, 200)),
DECODE(v_prs_kenmerk_key4, NULL, v_prs_kenmerk4, TO_CHAR(v_prs_kenmerk_key4) || '=' || SUBSTR(v_prs_kenmerk4, 1, 200)),
DECODE(v_prs_kenmerk_key5, NULL, v_prs_kenmerk5, TO_CHAR(v_prs_kenmerk_key5) || '=' || SUBSTR(v_prs_kenmerk5, 1, 200)),
DECODE(v_prs_kenmerk_key6, NULL, v_prs_kenmerk6, TO_CHAR(v_prs_kenmerk_key6) || '=' || SUBSTR(v_prs_kenmerk6, 1, 200)),
DECODE(v_prs_kenmerk_key7, NULL, v_prs_kenmerk7, TO_CHAR(v_prs_kenmerk_key7) || '=' || SUBSTR(v_prs_kenmerk7, 1, 200)),
DECODE(v_prs_kenmerk_key8, NULL, v_prs_kenmerk8, TO_CHAR(v_prs_kenmerk_key8) || '=' || SUBSTR(v_prs_kenmerk8, 1, 200)),
DECODE(v_prs_kenmerk_key9, NULL, v_prs_kenmerk9, TO_CHAR(v_prs_kenmerk_key9) || '=' || SUBSTR(v_prs_kenmerk9, 1, 200)),
DECODE(v_prs_kenmerk_key10, NULL, v_prs_kenmerk10, TO_CHAR(v_prs_kenmerk_key10) || '=' || SUBSTR(v_prs_kenmerk10, 1, 200)),
DECODE(v_prs_kenmerk_key11, NULL, v_prs_kenmerk11, TO_CHAR(v_prs_kenmerk_key11) || '=' || SUBSTR(v_prs_kenmerk11, 1, 200)),
DECODE(v_prs_kenmerk_key12, NULL, v_prs_kenmerk12, TO_CHAR(v_prs_kenmerk_key12) || '=' || SUBSTR(v_prs_kenmerk12, 1, 200)),
DECODE(v_prs_kenmerk_key13, NULL, v_prs_kenmerk13, TO_CHAR(v_prs_kenmerk_key13) || '=' || SUBSTR(v_prs_kenmerk13, 1, 200)),
DECODE(v_prs_kenmerk_key14, NULL, v_prs_kenmerk14, TO_CHAR(v_prs_kenmerk_key14) || '=' || SUBSTR(v_prs_kenmerk14, 1, 200)),
DECODE(v_prs_kenmerk_key15, NULL, v_prs_kenmerk15, TO_CHAR(v_prs_kenmerk_key15) || '=' || SUBSTR(v_prs_kenmerk15, 1, 200)),
DECODE(v_prs_kenmerk_key16, NULL, v_prs_kenmerk16, TO_CHAR(v_prs_kenmerk_key16) || '=' || SUBSTR(v_prs_kenmerk16, 1, 200)),
DECODE(v_prs_kenmerk_key17, NULL, v_prs_kenmerk17, TO_CHAR(v_prs_kenmerk_key17) || '=' || SUBSTR(v_prs_kenmerk17, 1, 200)),
DECODE(v_prs_kenmerk_key18, NULL, v_prs_kenmerk18, TO_CHAR(v_prs_kenmerk_key18) || '=' || SUBSTR(v_prs_kenmerk18, 1, 200)),
DECODE(v_prs_kenmerk_key19, NULL, v_prs_kenmerk19, TO_CHAR(v_prs_kenmerk_key19) || '=' || SUBSTR(v_prs_kenmerk19, 1, 200)),
DECODE(v_prs_kenmerk_key20, NULL, v_prs_kenmerk20, TO_CHAR(v_prs_kenmerk_key20) || '=' || SUBSTR(v_prs_kenmerk20, 1, 200)),
rec1.fac_import_key,
rec1.fac_imp_file_index);
@@ -1868,10 +1968,10 @@ AS
recPersLid cPersLid%ROWTYPE;
-- SUBPROC
PROCEDURE upsertkenmerk_imp(p_perslid_key IN NUMBER, p_kenmerkwaarde IN VARCHAR2)
PROCEDURE upsertkenmerk_imp(p_perslid_key IN NUMBER,
p_kenmerkwaarde IN VARCHAR2)
AS
ccount NUMBER;
v_kenmerk VARCHAR2(60);
v_sql VARCHAR2(1000);
v_cursor INTEGER;
v_rowsprocessed NUMBER DEFAULT 0;
@@ -1879,50 +1979,28 @@ AS
v_kenmerk_key prs_kenmerk.prs_kenmerk_key%TYPE;
v_kenmerk_type prs_kenmerk.prs_kenmerk_kenmerktype%TYPE;
v_kenmerk_niveau prs_kenmerk.prs_kenmerk_niveau%TYPE;
v_kenmerk_waarde prs_kenmerklink.prs_kenmerklink_waarde%TYPE;
v_objectnaam fac_kenmerkdomein.fac_kenmerkdomein_objectnaam%TYPE;
v_kolomnaam fac_kenmerkdomein.fac_kenmerkdomein_kolomnaam%TYPE;
v_kolomtxt fac_kenmerkdomein.fac_kenmerkdomein_kolomtxt%TYPE;
v_kenmerklink_key prs_kenmerklink.prs_kenmerklink_key%TYPE;
BEGIN
IF p_kenmerkwaarde IS NOT NULL
v_kenmerk_key := fac.safe_to_number(SUBSTR (p_kenmerkwaarde, 1, INSTR (p_kenmerkwaarde, '=') - 1));
v_kenmerk_waarde := SUBSTR (p_kenmerkwaarde, INSTR (p_kenmerkwaarde, '=') + 1);
IF v_kenmerk_key IS NOT NULL AND v_kenmerk_waarde IS NOT NULL
THEN
v_errormsg := 'Fout bij bepalen kenmerk [' || p_kenmerkwaarde || ']';
v_errormsg := 'Fout bij bepalen kenmerk [' || v_kenmerk_key || ']';
v_kenmerk := SUBSTR(p_kenmerkwaarde, 1, INSTR(p_kenmerkwaarde, '=') - 1);
v_waarde := SUBSTR(p_kenmerkwaarde, INSTR(p_kenmerkwaarde, '=') + 1);
SELECT prs_kenmerk_niveau
, prs_kenmerk_kenmerktype
INTO v_kenmerk_niveau
, v_kenmerk_type
FROM prs_kenmerk
WHERE prs_kenmerk_key = v_kenmerk_key
AND prs_kenmerk_verwijder IS NULL;
IF fac.safe_to_number (v_kenmerk) IS NULL
THEN
SELECT k.prs_kenmerk_key,
k.prs_kenmerk_kenmerktype,
k.prs_kenmerk_niveau
INTO v_kenmerk_key,
v_kenmerk_type,
v_kenmerk_niveau
FROM ( SELECT ks.prs_kenmerk_key,
ks.prs_kenmerk_kenmerktype,
ks.prs_kenmerk_niveau,
ks.prs_kenmerk_volgnr
FROM prs_v_aanwezigkenmerk ks
WHERE ks.prs_kenmerk_kenmerktype IN ('C', 'D', 'N', 'R', 'S', 'X', 'B', 'V')
AND COALESCE(UPPER(ks.prs_kenmerk_omschrijving), ks.prs_kenmerk_upper) = UPPER(v_kenmerk)
ORDER BY ks.prs_kenmerk_volgnr
) k
WHERE ROWNUM = 1;
ELSE
SELECT k.prs_kenmerk_key,
k.prs_kenmerk_kenmerktype,
k.prs_kenmerk_niveau
INTO v_kenmerk_key,
v_kenmerk_type,
v_kenmerk_niveau
FROM prs_v_aanwezigkenmerk k
WHERE k.prs_kenmerk_key = v_kenmerk
AND k.prs_kenmerk_kenmerktype IN ('C', 'D', 'N', 'R', 'S', 'X', 'B', 'V')
ORDER BY k.prs_kenmerk_volgnr;
END IF;
IF v_waarde IS NOT NULL
IF p_kenmerkwaarde IS NOT NULL
THEN
IF v_kenmerk_type IN ('R', 'S')
THEN
@@ -1932,11 +2010,12 @@ AS
INTO ccount
FROM prs_kenmerk k,
fac_kenmerkdomein d
WHERE k.fac_kenmerkdomein_key = d.fac_kenmerkdomein_key
AND d.fac_usrtab_key IS NOT NULL
AND k.prs_kenmerk_key = v_kenmerk_key;
WHERE k.prs_kenmerk_key = v_kenmerk_key
AND k.prs_kenmerk_niveau = v_kenmerk_niveau
AND k.fac_kenmerkdomein_key = d.fac_kenmerkdomein_key
AND d.fac_usrtab_key IS NOT NULL;
v_errormsg := 'Fout bij bepalen nieuwe waarde [' || v_waarde || ']';
v_errormsg := 'Fout bij bepalen nieuwe waarde [' || p_kenmerkwaarde || ']';
IF ccount = 1
THEN -- Eigen tabel
@@ -1946,9 +2025,10 @@ AS
fac_kenmerkdomein d,
fac_v_aanwezigusrdata ud
WHERE k.prs_kenmerk_key = v_kenmerk_key
AND k.prs_kenmerk_niveau = v_kenmerk_niveau
AND k.fac_kenmerkdomein_key = d.fac_kenmerkdomein_key
AND d.fac_usrtab_key = ud.fac_usrtab_key
AND UPPER(TRIM(ud.fac_usrdata_omschr)) = UPPER(v_waarde);
AND UPPER(TRIM(ud.fac_usrdata_omschr)) = UPPER(v_kenmerk_waarde);
ELSE -- FACILITOR view/tabel
SELECT d.fac_kenmerkdomein_objectnaam,
d.fac_kenmerkdomein_kolomnaam,
@@ -1959,6 +2039,7 @@ AS
FROM prs_kenmerk k,
fac_kenmerkdomein d
WHERE k.prs_kenmerk_key = v_kenmerk_key
AND k.prs_kenmerk_niveau = v_kenmerk_niveau
AND k.fac_kenmerkdomein_key = d.fac_kenmerkdomein_key
AND d.fac_usrtab_key IS NULL;
@@ -1968,14 +2049,14 @@ AS
v_cursor := DBMS_SQL.open_cursor;
DBMS_SQL.parse (v_cursor, v_sql, DBMS_SQL.native);
DBMS_SQL.BIND_VARIABLE(v_cursor, ':pwaarde', v_waarde);
DBMS_SQL.BIND_VARIABLE(v_cursor, ':pwaarde', v_kenmerk_waarde);
DBMS_SQL.define_column(v_cursor, 1, v_waarde, 255);
v_rowsprocessed := DBMS_SQL.execute_and_fetch (v_cursor);
DBMS_SQL.column_value (v_cursor, 1, v_waarde);
DBMS_SQL.close_cursor(v_cursor);
END IF;
ELSE -- C(Karakter)/D(Datum)/N(Numeriek)/X(Bestandsnaam)
NULL; -- v_waarde := p_waarde;
v_waarde := v_kenmerk_waarde;
END IF;
v_errormsg := 'Fout bij bepalen huidige waarde';
@@ -1986,7 +2067,8 @@ AS
v_kenmerklink_key
FROM prs_v_aanwezigkenmerklink
WHERE prs_link_key = p_perslid_key
AND prs_kenmerk_key = v_kenmerk_key;
AND prs_kenmerk_key = v_kenmerk_key
and prs_kenmerklink_niveau = v_kenmerk_niveau;
IF v_kenmerk_type = 'N' -- Alleen voor numerieke waarden de decimale komma vervangen door punt.
THEN