-- -- $Id$ -- -- PDKL#86262 Implementatie Polidirect Klinieken -- Import voor bestelvoorraad -- DEFINE thisfile = 'PDKL#86262_2.SQL' DEFINE dbuser = '^PDKL' SET ECHO ON SET DEFINE ON COLUMN fcltlogfile NEW_VALUE fcltlogfile NOPRINT; COLUMN fcltcusterr NEW_VALUE fcltcusterr NOPRINT; WHENEVER SQLERROR CONTINUE; SELECT adm.getscriptspoolfile ('&thisfile') AS fcltlogfile FROM DUAL; SPOOL &fcltlogfile WHENEVER SQLERROR EXIT; SELECT adm.checkscriptcust ('&dbuser') AS fcltcusterr FROM DUAL; WHENEVER SQLERROR CONTINUE; PROMPT &fcltcusterr SET DEFINE OFF ------ payload begin ------ CREATE TABLE pdkl_imp_catalogus ( fac_import_key NUMBER (10), ins_discipline_key NUMBER (10), prs_bedrijf_key NUMBER (10), fac_imp_catalogus_datum DATE, ins_srtdeel_nr VARCHAR2 (32), ins_srtgroep_omschrijving VARCHAR2 (60), ins_srtdeel_omschrijving VARCHAR2 (100), ins_srtdeel_prijs NUMBER (11, 5), ins_srtdeel_eenheid VARCHAR2 (30), ins_srtdeel_image VARCHAR2 (255), ins_srtdeel_veelvoud NUMBER (6), ins_srtdeel_btw NUMBER (3), ins_srtdeel_vervaldatum DATE, ins_srtdeel_inkprijs NUMBER (11, 5), ins_srtdeel_minimum NUMBER (6), bes_staffeltabel_key NUMBER (10), ins_srtdeel_wijzigdagen NUMBER (3), ins_srtdeel_annuleerdagen NUMBER (3), ins_srtdeel_opmerking VARCHAR2 (2000), ins_srtdeel_sensortype NUMBER (3), ins_srtdeel_acadsymbol_dwgx NUMBER (16, 3), ins_srtdeel_acadsymbol_dwgy NUMBER (16, 3), ins_srtdeel_externnr VARCHAR2 (256), bes_srtdeel_maximum NUMBER (6), bes_srtdeel_notitie VARCHAR2 (50), -- magazijnlocatie bes_srtdeel_volgnr NUMBER (3), bes_srtdeel_voorraadmin NUMBER (3), bes_srtdeel_voorraadmax NUMBER (3) ); -- Procedures om catalogi in te lezen en te verwerken CREATE OR REPLACE PROCEDURE pdkl_import_catalogus (p_import_key IN NUMBER) IS p_discipline_key NUMBER (10); p_bedrijf_key NUMBER (10); c_delim VARCHAR2 (2) := fac.import_delimiter (p_import_key); v_newline fac_imp_file.fac_imp_file_line%TYPE; -- Input line v_errormsg VARCHAR2 (1000); v_errorhint VARCHAR2 (1000); oracle_err_num NUMBER; oracle_err_mes VARCHAR2 (200); v_aanduiding VARCHAR2 (200); header_is_valid NUMBER := 0; v_count_tot NUMBER (10) := 0; v_count_import NUMBER (10) := 0; v_ongeldig NUMBER (1) := 0; -- De importvelden v_discipline_omschrijving VARCHAR2 (255); v_bedrijf_naam VARCHAR2 (255); v_catalogus_datum VARCHAR2 (255); v_srtdeel_nr VARCHAR2 (255); v_srtgroep_omschrijving VARCHAR2 (255); v_srtdeel_omschrijving VARCHAR2 (255); v_srtdeel_prijs VARCHAR2 (255); v_srtdeel_eenheid VARCHAR2 (255); v_srtdeel_image VARCHAR2 (255); v_srtdeel_veelvoud VARCHAR2 (255); v_srtdeel_btw VARCHAR2 (255); v_srtdeel_vervaldatum VARCHAR2 (255); v_srtdeel_inkprijs VARCHAR2 (255); v_srtdeel_minimum VARCHAR2 (255); v_bes_staffeltabel_naam VARCHAR2 (255); v_srtdeel_wijzigdagen VARCHAR2 (255); v_srtdeel_annuleerdagen VARCHAR2 (255); v_srtdeel_opmerking VARCHAR2 (4000); -- straks afgekapt op 2000 v_srtdeel_maximum VARCHAR2 (255); v_srtdeel_notitie VARCHAR2 (255); v_srtdeel_volgnr VARCHAR2 (255); v_srtdeel_voorraadmin VARCHAR2 (255); v_srtdeel_voorraadmax VARCHAR2 (255); -- Overige velden: v_discipline_key NUMBER (10); v_bedrijf_key NUMBER (10); v_bes_staffeltabel_key NUMBER (10); CURSOR c1 IS SELECT fac_imp_file_line, LENGTH (TRIM (REPLACE (fac_imp_file_line, c_delim, ''))) regellengte FROM FAC_IMP_FILE WHERE fac_import_key = p_import_key ORDER BY fac_imp_file_index; BEGIN SELECT ins_discipline_key, prs_bedrijf_key INTO p_discipline_key, p_bedrijf_key FROM fac_import fi, fac_import_app fia WHERE fi.fac_import_key = p_import_key AND fi.fac_import_app_key = fia.fac_import_app_key; -- Eerst opruiming -- LET OP: we ondersteunen geen multi-variant meer DELETE FROM fac_imp_catalogus; FOR rec IN c1 LOOP BEGIN v_aanduiding := ''; v_errorhint := 'Fout inlezen importregel'; v_newline := rec.fac_imp_file_line; v_ongeldig := 0; -- Lees alle veldwaarden fac.imp_getfield (v_newline, c_delim, v_discipline_omschrijving); fac.imp_getfield (v_newline, c_delim, v_bedrijf_naam); fac.imp_getfield (v_newline, c_delim, v_catalogus_datum); fac.imp_getfield (v_newline, c_delim, v_srtdeel_nr); fac.imp_getfield (v_newline, c_delim, v_srtgroep_omschrijving); fac.imp_getfield (v_newline, c_delim, v_srtdeel_omschrijving); fac.imp_getfield (v_newline, c_delim, v_srtdeel_prijs); fac.imp_getfield (v_newline, c_delim, v_srtdeel_eenheid); fac.imp_getfield (v_newline, c_delim, v_srtdeel_image); fac.imp_getfield (v_newline, c_delim, v_srtdeel_veelvoud); fac.imp_getfield (v_newline, c_delim, v_srtdeel_btw); fac.imp_getfield (v_newline, c_delim, v_srtdeel_vervaldatum); fac.imp_getfield (v_newline, c_delim, v_srtdeel_inkprijs); fac.imp_getfield (v_newline, c_delim, v_srtdeel_minimum); fac.imp_getfield (v_newline, c_delim, v_bes_staffeltabel_naam); fac.imp_getfield (v_newline, c_delim, v_srtdeel_wijzigdagen); fac.imp_getfield (v_newline, c_delim, v_srtdeel_annuleerdagen); fac.imp_getfield (v_newline, c_delim, v_srtdeel_opmerking); fac.imp_getfield (v_newline, c_delim, v_srtdeel_maximum); fac.imp_getfield (v_newline, c_delim, v_srtdeel_notitie); fac.imp_getfield (v_newline, c_delim, v_srtdeel_volgnr); fac.imp_getfield (v_newline, c_delim, v_srtdeel_voorraadmin); fac.imp_getfield (v_newline, c_delim, v_srtdeel_voorraadmax); -- Ik controleer of ik een geldige header heb, dat is: in de juiste kolommen -- de juiste kolomkop. Ik controleer daarbij - sinds UWVA#21562 - bijna alle -- kolommen (spaties in kolomheaders zijn onhandig bij "round-trip syncen"). -- Ik negeer alles totdat ik een geldige header ben gepasseerd. IF (header_is_valid = 0) THEN IF UPPER (TRIM (v_discipline_omschrijving)) LIKE 'CATALOGUS%' AND UPPER (TRIM (v_bedrijf_naam)) = 'LEVERANCIER' --AND UPPER (TRIM (v_catalogus_datum)) = 'CAT DATUM' -- Laat maar! AND UPPER (TRIM (v_srtdeel_nr)) = 'ARTIKELNR' AND UPPER (TRIM (v_srtgroep_omschrijving)) = 'GROEP' AND UPPER (TRIM (v_srtdeel_omschrijving)) = 'OMSCHRIJVING' AND UPPER (TRIM (v_srtdeel_prijs)) = 'PRIJS' AND UPPER (TRIM (v_srtdeel_eenheid)) = 'EENHEID' AND UPPER (TRIM (v_srtdeel_image)) = 'PICTURE' AND UPPER (TRIM (v_srtdeel_veelvoud)) = 'ORDERAANTAL' AND UPPER (TRIM (v_srtdeel_btw)) = 'TAX' AND UPPER (TRIM (v_srtdeel_vervaldatum)) = 'DUEDATE' AND UPPER (TRIM (v_srtdeel_inkprijs)) = 'INKOOPPRIJS' AND UPPER (TRIM (v_srtdeel_minimum)) = 'MINIMUM' AND UPPER (TRIM (v_bes_staffeltabel_naam)) = 'STAFFELTABEL' --AND UPPER (TRIM (v_srtdeel_wijzigdagen)) = 'WIJZIGDAGEN' -- Laat maar! --AND UPPER (TRIM (v_srtdeel_annuleerdagen)) = 'ANNULEERDAGEN' -- Laat maar! AND UPPER (TRIM (v_srtdeel_opmerking)) = 'OPMERKING' AND UPPER (TRIM (v_srtdeel_maximum)) = 'MAXIMUM' AND UPPER (TRIM (v_srtdeel_notitie)) = 'NOTITIE' AND UPPER (TRIM (v_srtdeel_volgnr)) = 'VOLGNUMMER' AND UPPER (TRIM (v_srtdeel_voorraadmin)) = 'MINIMUMVOORRAAD' AND UPPER (TRIM (v_srtdeel_voorraadmax)) = 'MAXIMUMVOORRAAD' THEN header_is_valid := 1; END IF; ELSIF rec.regellengte > 1 -- Lege regels overslaan! THEN v_count_tot := v_count_tot + 1; v_aanduiding := '[' || TRIM (v_discipline_omschrijving) || '|' || TRIM (v_bedrijf_naam) || '|' || TRIM (v_srtdeel_nr) || '] '; v_discipline_omschrijving := TRIM (v_discipline_omschrijving); v_errorhint := 'Catalogus onbekend/ongeldig; regel wordt niet ingelezen'; SELECT ins_discipline_key INTO v_discipline_key FROM INS_TAB_DISCIPLINE WHERE UPPER (ins_discipline_omschrijving) = UPPER (v_discipline_omschrijving) AND COALESCE (p_discipline_key, ins_discipline_key) = ins_discipline_key -- CONN#20934/Import bedoelt voor catalogus? AND ins_discipline_module = 'BES' AND ins_discipline_verwijder IS NULL; v_bedrijf_naam := TRIM (v_bedrijf_naam); v_errorhint := 'Bedrijf onbekend/ongeldig; regel wordt niet ingelezen'; SELECT prs_bedrijf_key INTO v_bedrijf_key FROM PRS_BEDRIJF WHERE UPPER (prs_bedrijf_naam) = UPPER (v_bedrijf_naam) AND COALESCE (p_bedrijf_key, prs_bedrijf_key) = prs_bedrijf_key -- Import bedoelt voor bedrijf? AND prs_bedrijf_verwijder IS NULL; v_errorhint := 'Fout bij controleren importregel'; -- Indien leeg, dan catalogusdatum=SYSDATE gebruiken! v_catalogus_datum := COALESCE (TRIM (v_catalogus_datum), TO_CHAR (SYSDATE, 'yyyymmdd')); IF fac.safe_to_date (v_catalogus_datum, 'yyyymmdd') IS NULL THEN fac.imp_writelog (p_import_key, 'W', v_aanduiding || 'Ongeldige catalogusdatum', 'Regel wordt niet ingelezen'); v_ongeldig := 1; END IF; v_srtdeel_nr := TRIM (v_srtdeel_nr); IF LENGTH (v_srtdeel_nr) > 32 THEN fac.imp_writelog (p_import_key, 'W', v_aanduiding || 'Artikelnummer te lang', 'Nummer wordt afgebroken (Nr:' || v_srtdeel_nr || ')'); END IF; v_srtgroep_omschrijving := TRIM (v_srtgroep_omschrijving); IF LENGTH (v_srtgroep_omschrijving) > 60 THEN fac.imp_writelog (p_import_key, 'W', v_aanduiding || 'Groepomschrijving te lang', 'Omschrijving wordt afgebroken (Nr:' || v_srtdeel_nr || ')'); END IF; v_srtdeel_omschrijving := TRIM (v_srtdeel_omschrijving); IF LENGTH (v_srtdeel_omschrijving) > 100 THEN fac.imp_writelog (p_import_key, 'W', v_aanduiding || 'Artikelomschrijving te lang', 'Omschrijving wordt afgebroken (Nr:' || v_srtdeel_nr || ')'); END IF; -- Indien leeg, dan blijft/wordt prijs=ongedefinieerd=NULL! v_srtdeel_prijs := TRIM (v_srtdeel_prijs); IF v_srtdeel_prijs IS NOT NULL AND fac.safe_to_number (v_srtdeel_prijs) IS NULL THEN fac.imp_writelog (p_import_key, 'W', v_aanduiding || 'Ongeldige prijs', 'Regel wordt niet ingelezen (Nr:' || v_srtdeel_nr || ')'); v_ongeldig := 1; END IF; v_srtdeel_eenheid := TRIM (v_srtdeel_eenheid); IF LENGTH (v_srtdeel_eenheid) > 30 THEN fac.imp_writelog (p_import_key, 'W', v_aanduiding || 'Eenheid te lang', 'Eenheid wordt afgebroken (Nr:' || v_srtdeel_nr || ')'); END IF; v_srtdeel_image := TRIM (v_srtdeel_image); IF LENGTH (v_srtdeel_image) > 255 THEN fac.imp_writelog (p_import_key, 'W', v_aanduiding || 'Imagenaam te lang', 'Naam wordt afgebroken (Nr:' || v_srtdeel_nr || ')'); END IF; -- Veelvoud mag niet negatief of meer zijn dan 6 posities lang. -- Indien leeg, dan veelvoud=1! v_srtdeel_veelvoud := COALESCE (TRIM (v_srtdeel_veelvoud), '1'); IF fac.safe_to_number (v_srtdeel_veelvoud) IS NULL OR fac.safe_to_number (v_srtdeel_veelvoud) < 0 OR fac.safe_to_number (v_srtdeel_veelvoud) > 999999 THEN fac.imp_writelog (p_import_key, 'W', v_aanduiding || 'Ongeldig veelvoud', 'Regel wordt niet ingelezen (Nr:' || v_srtdeel_nr || ')'); v_ongeldig := 1; END IF; -- Indien leeg, dan blijft/wordt BTW-tarief=ongedefinieerd=NULL! v_srtdeel_btw := TRIM (v_srtdeel_btw); IF v_srtdeel_btw IS NOT NULL AND fac.safe_to_number (v_srtdeel_btw) IS NULL THEN fac.imp_writelog (p_import_key, 'W', v_aanduiding || 'Ongeldig BTW-tarief', 'Regel wordt niet ingelezen (Nr:' || v_srtdeel_nr || ')'); v_ongeldig := 1; END IF; -- Indien leeg, dan blijft/wordt vervaldatum=ongedefinieerd=NULL! v_srtdeel_vervaldatum := TRIM (v_srtdeel_vervaldatum); IF v_srtdeel_vervaldatum IS NOT NULL AND fac.safe_to_date (v_srtdeel_vervaldatum, 'yyyymmdd') IS NULL THEN fac.imp_writelog (p_import_key, 'W', v_aanduiding || 'Ongeldige vervaldatum', 'Regel wordt niet ingelezen (Nr:' || v_srtdeel_nr || ')'); v_ongeldig := 1; END IF; -- Indien leeg, dan blijft/wordt inkoopprijs=ongedefinieerd=NULL! v_srtdeel_inkprijs := TRIM (v_srtdeel_inkprijs); IF v_srtdeel_inkprijs IS NOT NULL AND fac.safe_to_number (v_srtdeel_inkprijs) IS NULL THEN fac.imp_writelog (p_import_key, 'W', v_aanduiding || 'Ongeldige inkoopprijs', 'Regel wordt niet ingelezen (Nr:' || v_srtdeel_nr || ')'); v_ongeldig := 1; END IF; -- Minimum mag niet negatief of meer zijn dan 6 posities lang. -- Indien leeg, dan blijft/wordt minimum=ongedefinieerd=NULL! v_srtdeel_minimum := TRIM (v_srtdeel_minimum); IF v_srtdeel_minimum IS NOT NULL AND ( fac.safe_to_number (v_srtdeel_minimum) IS NULL OR fac.safe_to_number (v_srtdeel_minimum) < 0 OR fac.safe_to_number (v_srtdeel_minimum) > 999999) THEN fac.imp_writelog (p_import_key, 'W', v_aanduiding || 'Ongeldig minimum', 'Regel wordt niet ingelezen (Nr:' || v_srtdeel_nr || ')'); v_ongeldig := 1; END IF; v_bes_staffeltabel_naam := TRIM (v_bes_staffeltabel_naam); v_errorhint := 'Fout bij bepalen staffeltabel; regel wordt niet ingelezen'; IF v_bes_staffeltabel_naam IS NOT NULL THEN SELECT bes_staffeltabel_key INTO v_bes_staffeltabel_key FROM bes_staffeltabel WHERE UPPER (bes_staffeltabel_naam) = UPPER (v_bes_staffeltabel_naam); END IF; -- Wijzigdagen mag niet negatief of meer zijn dan 3 posities lang. -- Indien leeg, dan blijft/wordt wijzigdagen=ongedefinieerd=NULL! v_srtdeel_wijzigdagen := TRIM (v_srtdeel_wijzigdagen); IF v_srtdeel_wijzigdagen IS NOT NULL AND ( fac.safe_to_number (v_srtdeel_wijzigdagen) IS NULL OR fac.safe_to_number (v_srtdeel_wijzigdagen) < 0 OR fac.safe_to_number (v_srtdeel_wijzigdagen) > 999) THEN fac.imp_writelog (p_import_key, 'W', v_aanduiding || 'Ongeldig aantal wijzigdagen', 'Regel wordt niet ingelezen (Nr:' || v_srtdeel_nr || ')'); v_ongeldig := 1; END IF; -- Annuleerdagen mag niet negatief of meer zijn dan 3 posities lang. -- Indien leeg, dan blijft/wordt annuleerdagen=ongedefinieerd=NULL! v_srtdeel_annuleerdagen := TRIM (v_srtdeel_annuleerdagen); IF v_srtdeel_annuleerdagen IS NOT NULL AND ( fac.safe_to_number (v_srtdeel_annuleerdagen) IS NULL OR fac.safe_to_number (v_srtdeel_annuleerdagen) < 0 OR fac.safe_to_number (v_srtdeel_annuleerdagen) > 999) THEN fac.imp_writelog (p_import_key, 'W', v_aanduiding || 'Ongeldig aantal annuleerdagen', 'Regel wordt niet ingelezen (Nr:' || v_srtdeel_nr || ')'); v_ongeldig := 1; END IF; v_srtdeel_opmerking := TRIM (v_srtdeel_opmerking); IF LENGTH (v_srtdeel_opmerking) > 2000 THEN fac.imp_writelog (p_import_key, 'W', v_aanduiding || 'Opmerking te lang', 'Opmerking wordt afgebroken (Nr:' || v_srtdeel_nr || ')'); END IF; v_srtdeel_notitie := TRIM (v_srtdeel_notitie); IF LENGTH (v_srtdeel_notitie) > 50 THEN fac.imp_writelog (p_import_key, 'W', v_aanduiding || 'Notitie te lang', 'Notitie wordt afgebroken (Nr:' || v_srtdeel_nr || ')'); END IF; -- Maximum mag niet negatief of meer zijn dan 6 posities lang. -- Indien leeg, dan blijft/wordt maximum=ongedefinieerd=NULL! v_srtdeel_maximum := TRIM (v_srtdeel_maximum); IF v_srtdeel_maximum IS NOT NULL AND ( fac.safe_to_number (v_srtdeel_maximum) IS NULL OR fac.safe_to_number (v_srtdeel_maximum) < 0 OR fac.safe_to_number (v_srtdeel_maximum) > 999999) THEN fac.imp_writelog (p_import_key, 'W', v_aanduiding || 'Ongeldig maximum', 'Regel wordt niet ingelezen (Nr:' || v_srtdeel_nr || ')'); v_ongeldig := 1; END IF; -- Volgnummer mag niet negatief of meer zijn dan 3 posities lang. -- Indien leeg, dan blijft/wordt volgnummer=ongedefinieerd=NULL! v_srtdeel_volgnr := TRIM (v_srtdeel_volgnr); IF v_srtdeel_volgnr IS NOT NULL AND ( fac.safe_to_number (v_srtdeel_volgnr) IS NULL OR fac.safe_to_number (v_srtdeel_volgnr) < 0 OR fac.safe_to_number (v_srtdeel_volgnr) > 999) THEN fac.imp_writelog (p_import_key, 'W', v_aanduiding || 'Ongeldig volgnummer', 'Regel wordt niet ingelezen (Nr:' || v_srtdeel_nr || ')'); v_ongeldig := 1; END IF; -- Minimale voorraad mag niet negatief of meer zijn dan 3 posities lang. -- Indien leeg, dan blijft/wordt min voorraad=ongedefinieerd=NULL! v_srtdeel_voorraadmin := TRIM (v_srtdeel_voorraadmin); IF v_srtdeel_voorraadmin IS NOT NULL AND ( fac.safe_to_number (v_srtdeel_voorraadmin) IS NULL OR fac.safe_to_number (v_srtdeel_voorraadmin) < 0 OR fac.safe_to_number (v_srtdeel_voorraadmin) > 999) THEN fac.imp_writelog (p_import_key, 'W', v_aanduiding || 'Ongeldige minimale voorraad volgnummer', 'Regel wordt niet ingelezen (Nr:' || v_srtdeel_nr || ')'); v_ongeldig := 1; END IF; -- Maximale voorraad mag niet negatief of meer zijn dan 3 posities lang. -- Indien leeg, dan blijft/wordt max voorraad=ongedefinieerd=NULL! v_srtdeel_voorraadmax := TRIM (v_srtdeel_voorraadmax); IF v_srtdeel_voorraadmax IS NOT NULL AND ( fac.safe_to_number (v_srtdeel_voorraadmax) IS NULL OR fac.safe_to_number (v_srtdeel_voorraadmax) < 0 OR fac.safe_to_number (v_srtdeel_voorraadmax) > 999) THEN fac.imp_writelog (p_import_key, 'W', v_aanduiding || 'Ongeldige maximale voorraad volgnummer', 'Regel wordt niet ingelezen (Nr:' || v_srtdeel_nr || ')'); v_ongeldig := 1; END IF; IF v_ongeldig = 0 THEN v_errorhint := 'Fout toevoegen importregel'; INSERT INTO PDKL_IMP_CATALOGUS (fac_import_key, ins_discipline_key, prs_bedrijf_key, fac_imp_catalogus_datum, ins_srtdeel_nr, ins_srtgroep_omschrijving, ins_srtdeel_omschrijving, ins_srtdeel_prijs, ins_srtdeel_inkprijs, ins_srtdeel_eenheid, ins_srtdeel_image, ins_srtdeel_veelvoud, ins_srtdeel_btw, ins_srtdeel_vervaldatum, ins_srtdeel_minimum, bes_staffeltabel_key, ins_srtdeel_wijzigdagen, ins_srtdeel_annuleerdagen, ins_srtdeel_opmerking, bes_srtdeel_maximum, bes_srtdeel_notitie, bes_srtdeel_volgnr, bes_srtdeel_voorraadmin, bes_srtdeel_voorraadmax) VALUES (p_import_key, v_discipline_key, v_bedrijf_key, fac.safe_to_date (v_catalogus_datum, 'yyyymmdd'), SUBSTR (v_srtdeel_nr, 1, 32), SUBSTR (v_srtgroep_omschrijving, 1, 60), SUBSTR (v_srtdeel_omschrijving, 1, 100), fac.safe_to_number (v_srtdeel_prijs), fac.safe_to_number (v_srtdeel_inkprijs), SUBSTR (v_srtdeel_eenheid, 1, 30), SUBSTR (v_srtdeel_image, 1, 255), fac.safe_to_number (v_srtdeel_veelvoud), fac.safe_to_number (v_srtdeel_btw), fac.safe_to_date (v_srtdeel_vervaldatum, 'yyyymmdd'), fac.safe_to_number (v_srtdeel_minimum), v_bes_staffeltabel_key, fac.safe_to_number (v_srtdeel_wijzigdagen), fac.safe_to_number (v_srtdeel_annuleerdagen), SUBSTR (v_srtdeel_opmerking, 1, 2000), fac.safe_to_number (v_srtdeel_maximum), SUBSTR (v_srtdeel_notitie, 50), fac.safe_to_number (v_srtdeel_volgnr), fac.safe_to_number (v_srtdeel_voorraadmin), fac.safe_to_number (v_srtdeel_voorraadmax)); v_count_import := v_count_import + 1; END IF; END IF; EXCEPTION WHEN OTHERS THEN oracle_err_num := SQLCODE; oracle_err_mes := SUBSTR (SQLERRM, 1, 200); v_errormsg := 'ORACLE (error ' || oracle_err_num || '/' || oracle_err_mes || ')'; fac.imp_writelog (p_import_key, 'W', v_aanduiding || v_errormsg, v_errorhint); 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', 'Inleesproces: aantal ingelezen importregels: ' || TO_CHAR (v_count_tot), ''); fac.imp_writelog ( p_import_key, 'S', 'Inleesproces: 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 := 'ORACLE (error ' || oracle_err_num || '/' || oracle_err_mes || ')'; fac.imp_writelog (p_import_key, 'E', v_aanduiding || v_errormsg, 'Inlezen catalogus afgebroken!'); END pdkl_import_catalogus; / CREATE OR REPLACE PROCEDURE pdkl_update_catalogus (p_import_key IN NUMBER) AS v_errormsg VARCHAR2 (1000); oracle_err_num NUMBER; oracle_err_mes VARCHAR2 (200); v_aanduiding VARCHAR2 (200); v_disc_oms ins_tab_discipline.ins_discipline_omschrijving%TYPE; v_bedr_naam prs_bedrijf.prs_bedrijf_naam%TYPE; -- Voor n catalogus PROCEDURE l_update_catalogus (pdisc_key IN NUMBER, pbedr_key IN NUMBER) AS CURSOR c_delsrtdeel (cdisc_key IN NUMBER, cbedr_key IN NUMBER) IS SELECT sd.bes_srtdeel_key, sd.bes_srtdeel_nr, sd.bes_srtdeel_omschrijving FROM bes_srtdeel sd, bes_srtgroep sg WHERE sd.bes_srtgroep_key = sg.bes_srtgroep_key AND sg.ins_discipline_key = cdisc_key AND sd.prs_bedrijf_key = cbedr_key AND sd.bes_srtdeel_verwijder IS NULL AND NOT EXISTS -- Niet meer in importbestand irt. cat/bedrijf! (SELECT 1 FROM pdkl_imp_catalogus f WHERE fac_import_key = p_import_key AND f.ins_discipline_key = cdisc_key AND f.prs_bedrijf_key = cbedr_key AND UPPER (f.ins_srtdeel_nr) = UPPER (sd.bes_srtdeel_nr)); CURSOR c_delsrtgroep (cdisc_key IN NUMBER, cbedr_key IN NUMBER) IS SELECT sg.bes_srtgroep_key, sg.bes_srtgroep_omschrijving FROM bes_srtgroep sg WHERE sg.ins_discipline_key = cdisc_key AND sg.bes_srtgroep_verwijder IS NULL AND NOT EXISTS -- Niet meer in importbestand irt. alleen cat! (SELECT 1 FROM pdkl_imp_catalogus f WHERE fac_import_key = p_import_key AND f.ins_discipline_key = cdisc_key AND UPPER (f.ins_srtgroep_omschrijving) = UPPER (sg.bes_srtgroep_omschrijving)) AND NOT EXISTS -- Waaronder geen artikelen van ander bedrijf! (SELECT 1 FROM bes_srtdeel sd WHERE sd.bes_srtgroep_key = sg.bes_srtgroep_key AND sd.prs_bedrijf_key <> cbedr_key); CURSOR c_inssrtgroep (cdisc_key IN NUMBER, cbedr_key IN NUMBER) IS SELECT DISTINCT f.ins_srtgroep_omschrijving FROM pdkl_imp_catalogus f WHERE fac_import_key = p_import_key AND f.ins_srtgroep_omschrijving IS NOT NULL AND f.ins_discipline_key = cdisc_key AND f.prs_bedrijf_key = cbedr_key AND NOT EXISTS (SELECT 1 FROM bes_srtgroep sg WHERE sg.ins_discipline_key = cdisc_key AND UPPER (sg.bes_srtgroep_omschrijving) = UPPER (f.ins_srtgroep_omschrijving) AND sg.bes_srtgroep_verwijder IS NULL); CURSOR c_updsrtdeel (cdisc_key IN NUMBER, cbedr_key IN NUMBER) IS SELECT s.bes_srtdeel_key, f.* FROM pdkl_imp_catalogus f, bes_srtgroep g, bes_srtdeel s WHERE fac_import_key = p_import_key AND f.ins_discipline_key = cdisc_key AND f.prs_bedrijf_key = cbedr_key AND g.ins_discipline_key = cdisc_key AND g.bes_srtgroep_key = s.bes_srtgroep_key AND UPPER (s.bes_srtdeel_nr) = UPPER (f.ins_srtdeel_nr) AND s.prs_bedrijf_key = cbedr_key AND s.bes_srtdeel_verwijder IS NULL; CURSOR c_inssrtdeel (cdisc_key IN NUMBER, cbedr_key IN NUMBER) IS SELECT f.* FROM pdkl_imp_catalogus f WHERE fac_import_key = p_import_key AND f.ins_discipline_key = cdisc_key AND f.prs_bedrijf_key = cbedr_key AND NOT EXISTS (SELECT 1 FROM bes_srtgroep g, bes_srtdeel s WHERE g.ins_discipline_key = cdisc_key AND g.bes_srtgroep_key = s.bes_srtgroep_key AND UPPER (s.bes_srtdeel_nr) = UPPER (f.ins_srtdeel_nr) AND s.prs_bedrijf_key = cbedr_key AND s.bes_srtdeel_verwijder IS NULL); ccount NUMBER (10); l_srtgroep_key NUMBER (10); l_bes_srtdeel_key bes_srtdeel.bes_srtdeel_key%TYPE; l_omschrijving bes_srtdeel.bes_srtdeel_omschrijving%TYPE; l_prijs bes_srtdeel_prijs.bes_srtdeel_prijs_prijs%TYPE; l_inkprijs bes_srtdeel_prijs.bes_srtdeel_prijs_inkprijs%TYPE; l_veelvoud bes_srtdeel.bes_srtdeel_veelvoud%TYPE; l_minimum bes_srtdeel.bes_srtdeel_minimum%TYPE; l_wijzigdagen bes_srtdeel.bes_srtdeel_wijzigdagen%TYPE; l_annuleerdagen bes_srtdeel.bes_srtdeel_annuleerdagen%TYPE; l_opmerking bes_srtdeel.bes_srtdeel_opmerking%TYPE; l_maximum bes_srtdeel.bes_srtdeel_maximum%TYPE; l_notitie bes_srtdeel.bes_srtdeel_notitie%TYPE; l_volgnr bes_srtdeel.bes_srtdeel_volgnr%TYPE; l_voorraadmin bes_srtdeel.bes_srtdeel_voorraadmin%TYPE; l_voorraadmax bes_srtdeel.bes_srtdeel_voorraadmax%TYPE; BEGIN -- DELETE SRTDEEL ccount := 0; FOR rec IN c_delsrtdeel (pdisc_key, pbedr_key) LOOP v_errormsg := 'Fout bij verwijderen artikel ' || rec.bes_srtdeel_nr; UPDATE bes_srtdeel SET bes_srtdeel_verwijder = SYSDATE WHERE bes_srtdeel_key = rec.bes_srtdeel_key; v_errormsg := 'Fout bij verwijderen artikelkenmerken ' || rec.bes_srtdeel_nr; UPDATE bes_kenmerk SET bes_kenmerk_verwijder = SYSDATE WHERE bes_kenmerk_niveau = 'S' AND bes_srtinstallatie_key = rec.bes_srtdeel_key; fac.imp_writelog ( p_import_key, 'I', v_aanduiding || 'Artikel ' || rec.bes_srtdeel_nr || '/' || rec.bes_srtdeel_omschrijving || ' is verwijderd', ''); ccount := ccount + 1; END LOOP; fac.imp_writelog ( p_import_key, 'S', v_aanduiding || 'Er zijn ' || TO_CHAR (ccount) || ' artikelen verwijderd', ''); COMMIT; -- DELETE SRTGROEP ccount := 0; FOR rec IN c_delsrtgroep (pdisc_key, pbedr_key) LOOP v_errormsg := 'Fout bij verwijderen groep ' || rec.bes_srtgroep_omschrijving; UPDATE bes_srtgroep SET bes_srtgroep_verwijder = SYSDATE WHERE bes_srtgroep_key = rec.bes_srtgroep_key; v_errormsg := 'Fout bij verwijderen groepskenmerken ' || rec.bes_srtgroep_omschrijving; UPDATE bes_kenmerk SET bes_kenmerk_verwijder = SYSDATE WHERE bes_kenmerk_niveau = 'G' AND bes_srtinstallatie_key = rec.bes_srtgroep_key; fac.imp_writelog ( p_import_key, 'I', v_aanduiding || 'Groep ' || rec.bes_srtgroep_omschrijving || ' is verwijderd', ''); ccount := ccount + 1; END LOOP; fac.imp_writelog (p_import_key, 'S', v_aanduiding || 'Er zijn ' || TO_CHAR (ccount) || ' groepen verwijderd', ''); COMMIT; -- INSERT SRTGROEP ccount := 0; FOR rec IN c_inssrtgroep (pdisc_key, pbedr_key) LOOP BEGIN v_errormsg := 'Fout bij toevoegen groep ' || rec.ins_srtgroep_omschrijving; INSERT INTO bes_srtgroep (ins_discipline_key, bes_srtgroep_omschrijving) VALUES (pdisc_key, rec.ins_srtgroep_omschrijving); fac.imp_writelog ( p_import_key, 'I', v_aanduiding || 'Groep ' || rec.ins_srtgroep_omschrijving || ' is toegevoegd', ''); ccount := ccount + 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, ''); END; END LOOP; fac.imp_writelog (p_import_key, 'S', v_aanduiding || 'Er zijn ' || TO_CHAR (ccount) || ' groepen toegevoegd', ''); COMMIT; -- UPDATE SRTDEEL ccount := 0; FOR rec IN c_updsrtdeel (pdisc_key, pbedr_key) LOOP BEGIN v_errormsg := 'Fout bij bepalen groep ' || rec.ins_srtgroep_omschrijving; SELECT bes_srtgroep_key INTO l_srtgroep_key FROM bes_srtgroep WHERE bes_srtgroep_verwijder IS NULL AND ins_discipline_key = pdisc_key AND UPPER (bes_srtgroep_omschrijving) = UPPER (rec.ins_srtgroep_omschrijving); v_errormsg := 'Fout bij bepalen huidige artikel-velden ' || rec.ins_srtdeel_nr; -- Tbv. logging de oude waarden opzoeken. SELECT bes_srtdeel_omschrijving, bes.getsrtdeelprijs (rec.bes_srtdeel_key, NULL), bes.getsrtdeelinkprijs (rec.bes_srtdeel_key, NULL), bes_srtdeel_veelvoud, bes_srtdeel_minimum, bes_srtdeel_wijzigdagen, bes_srtdeel_annuleerdagen, bes_srtdeel_opmerking, bes_srtdeel_maximum, bes_srtdeel_notitie, bes_srtdeel_volgnr, bes_srtdeel_voorraadmin, bes_srtdeel_voorraadmax INTO l_omschrijving, l_prijs, l_inkprijs, l_veelvoud, l_minimum, l_wijzigdagen, l_annuleerdagen, l_opmerking, l_maximum, l_notitie, l_volgnr, l_voorraadmin, l_voorraadmax FROM bes_srtdeel WHERE bes_srtdeel_verwijder IS NULL AND bes_srtdeel_key = rec.bes_srtdeel_key; v_errormsg := 'Fout bij bijwerken artikel ' || rec.ins_srtdeel_nr; -- Codetechnisch zou hier bes.upsert_srtdeel() passen, maar die doet bv nog geen inkprijs. -- Later nog eens TODO UPDATE bes_srtdeel SET bes_srtgroep_key = l_srtgroep_key, bes_srtdeel_omschrijving = rec.ins_srtdeel_omschrijving, bes_srtdeel_image = rec.ins_srtdeel_image, bes_srtdeel_btw = rec.ins_srtdeel_btw, bes_srtdeel_eenheid = rec.ins_srtdeel_eenheid, bes_srtdeel_vervaldatum = rec.ins_srtdeel_vervaldatum, bes_srtdeel_veelvoud = rec.ins_srtdeel_veelvoud, bes_srtdeel_minimum = rec.ins_srtdeel_minimum, bes_staffeltabel_key = rec.bes_staffeltabel_key, bes_srtdeel_wijzigdagen = rec.ins_srtdeel_wijzigdagen, bes_srtdeel_annuleerdagen = rec.ins_srtdeel_annuleerdagen, bes_srtdeel_opmerking = rec.ins_srtdeel_opmerking, bes_srtdeel_maximum = rec.bes_srtdeel_maximum, bes_srtdeel_notitie = rec.bes_srtdeel_notitie, bes_srtdeel_volgnr = rec.bes_srtdeel_volgnr, bes_srtdeel_voorraadmin = rec.bes_srtdeel_voorraadmin, bes_srtdeel_voorraadmax = rec.bes_srtdeel_voorraadmax WHERE bes_srtdeel_verwijder IS NULL AND bes_srtdeel_key = rec.bes_srtdeel_key; IF l_omschrijving <> rec.ins_srtdeel_omschrijving THEN fac.imp_writelog ( p_import_key, 'I', 'Artikel ' || rec.ins_srtdeel_nr || '/' || rec.ins_srtdeel_omschrijving || ' is gewijzigd', 'Omschrijving ' || l_omschrijving || ' -> ' || rec.ins_srtdeel_omschrijving); END IF; bes.upsert_srtdeel_prijs (rec.bes_srtdeel_key, rec.ins_srtdeel_prijs, rec.ins_srtdeel_inkprijs); IF l_prijs <> rec.ins_srtdeel_prijs THEN fac.imp_writelog ( p_import_key, 'I', 'Artikel ' || rec.ins_srtdeel_nr || '/' || rec.ins_srtdeel_omschrijving || ' is gewijzigd', 'Prijs ' || l_prijs || ' -> ' || rec.ins_srtdeel_prijs); END IF; IF l_inkprijs <> rec.ins_srtdeel_inkprijs THEN fac.imp_writelog ( p_import_key, 'I', 'Artikel ' || rec.ins_srtdeel_nr || '/' || rec.ins_srtdeel_omschrijving || ' is gewijzigd', 'Inkoopprijs ' || l_inkprijs || ' -> ' || rec.ins_srtdeel_inkprijs); END IF; IF l_veelvoud <> rec.ins_srtdeel_veelvoud THEN fac.imp_writelog ( p_import_key, 'I', 'Artikel ' || rec.ins_srtdeel_nr || '/' || rec.ins_srtdeel_omschrijving || ' is gewijzigd', 'Bestelveelvoud ' || l_veelvoud || ' -> ' || rec.ins_srtdeel_veelvoud); END IF; IF l_minimum <> rec.ins_srtdeel_minimum THEN fac.imp_writelog ( p_import_key, 'I', 'Artikel ' || rec.ins_srtdeel_nr || '/' || rec.ins_srtdeel_omschrijving || ' is gewijzigd', 'Bestelminimum ' || l_minimum || ' -> ' || rec.ins_srtdeel_minimum); END IF; IF l_wijzigdagen <> rec.ins_srtdeel_wijzigdagen THEN fac.imp_writelog ( p_import_key, 'I', 'Artikel ' || rec.ins_srtdeel_nr || '/' || rec.ins_srtdeel_omschrijving || ' is gewijzigd', 'Wijzigdagen ' || l_wijzigdagen || ' -> ' || rec.ins_srtdeel_wijzigdagen); END IF; IF l_annuleerdagen <> rec.ins_srtdeel_annuleerdagen THEN fac.imp_writelog ( p_import_key, 'I', 'Artikel ' || rec.ins_srtdeel_nr || '/' || rec.ins_srtdeel_omschrijving || ' is gewijzigd', 'Annuleerdagen ' || l_annuleerdagen || ' -> ' || rec.ins_srtdeel_annuleerdagen); END IF; IF l_opmerking <> rec.ins_srtdeel_opmerking THEN fac.imp_writelog ( p_import_key, 'I', 'Artikel ' || rec.ins_srtdeel_nr || '/' || rec.ins_srtdeel_omschrijving || ' is gewijzigd', 'Opmerking ' || l_opmerking || ' -> ' || rec.ins_srtdeel_opmerking); END IF; IF l_maximum <> rec.bes_srtdeel_maximum THEN fac.imp_writelog ( p_import_key, 'I', 'Artikel ' || rec.ins_srtdeel_nr || '/' || rec.ins_srtdeel_omschrijving || ' is gewijzigd', 'Maximum ' || l_maximum || ' -> ' || rec.bes_srtdeel_maximum); END IF; IF l_notitie <> rec.bes_srtdeel_notitie THEN fac.imp_writelog ( p_import_key, 'I', 'Artikel ' || rec.ins_srtdeel_nr || '/' || rec.ins_srtdeel_omschrijving || ' is gewijzigd', 'Notitie ' || l_notitie || ' -> ' || rec.bes_srtdeel_notitie); END IF; IF l_volgnr <> rec.bes_srtdeel_volgnr THEN fac.imp_writelog ( p_import_key, 'I', 'Artikel ' || rec.ins_srtdeel_nr || '/' || rec.ins_srtdeel_omschrijving || ' is gewijzigd', 'Volgnr ' || l_volgnr || ' -> ' || rec.bes_srtdeel_volgnr); END IF; IF l_voorraadmin <> rec.bes_srtdeel_voorraadmin THEN fac.imp_writelog ( p_import_key, 'I', 'Artikel ' || rec.ins_srtdeel_nr || '/' || rec.ins_srtdeel_omschrijving || ' is gewijzigd', 'Minimale voorraad ' || l_voorraadmin || ' -> ' || rec.bes_srtdeel_voorraadmin); END IF; IF l_voorraadmax <> rec.bes_srtdeel_voorraadmax THEN fac.imp_writelog ( p_import_key, 'I', 'Artikel ' || rec.ins_srtdeel_nr || '/' || rec.ins_srtdeel_omschrijving || ' is gewijzigd', 'Maximale voorraad ' || l_voorraadmax || ' -> ' || rec.bes_srtdeel_voorraadmax); END IF; ccount := ccount + 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, ''); END; END LOOP; fac.imp_writelog ( p_import_key, 'S', v_aanduiding || 'Er zijn ' || TO_CHAR (ccount) || ' artikelen bijgewerkt', ''); COMMIT; -- INSERT SRTDEEL ccount := 0; FOR rec IN c_inssrtdeel (pdisc_key, pbedr_key) LOOP BEGIN v_errormsg := 'Fout bij bepalen groep ' || rec.ins_srtgroep_omschrijving; SELECT bes_srtgroep_key INTO l_srtgroep_key FROM bes_srtgroep WHERE bes_srtgroep_verwijder IS NULL AND ins_discipline_key = pdisc_key AND UPPER (bes_srtgroep_omschrijving) = UPPER (rec.ins_srtgroep_omschrijving); v_errormsg := 'Fout bij toevoegen artikel ' || rec.ins_srtdeel_nr; INSERT INTO bes_srtdeel (bes_srtgroep_key, bes_srtdeel_nr, bes_srtdeel_omschrijving, bes_srtdeel_image, bes_srtdeel_btw, bes_srtdeel_eenheid, bes_srtdeel_dimensie, prs_bedrijf_key, bes_srtdeel_vervaldatum, bes_srtdeel_veelvoud, bes_srtdeel_minimum, bes_staffeltabel_key, bes_srtdeel_wijzigdagen, bes_srtdeel_annuleerdagen, bes_srtdeel_opmerking, bes_srtdeel_maximum, bes_srtdeel_notitie, bes_srtdeel_volgnr, bes_srtdeel_voorraadmin, bes_srtdeel_voorraadmax) VALUES (l_srtgroep_key, rec.ins_srtdeel_nr, rec.ins_srtdeel_omschrijving, rec.ins_srtdeel_image, rec.ins_srtdeel_btw, rec.ins_srtdeel_eenheid, 0, pbedr_key, rec.ins_srtdeel_vervaldatum, rec.ins_srtdeel_veelvoud, rec.ins_srtdeel_minimum, rec.bes_staffeltabel_key, rec.ins_srtdeel_wijzigdagen, rec.ins_srtdeel_annuleerdagen, rec.ins_srtdeel_opmerking, rec.bes_srtdeel_maximum, rec.bes_srtdeel_notitie, rec.bes_srtdeel_volgnr, rec.bes_srtdeel_voorraadmin, rec.bes_srtdeel_voorraadmax) RETURNING bes_srtdeel_key INTO l_bes_srtdeel_key; bes.upsert_srtdeel_prijs (l_bes_srtdeel_key, rec.ins_srtdeel_prijs, rec.ins_srtdeel_inkprijs); fac.imp_writelog ( p_import_key, 'I', v_aanduiding || 'Artikel ' || rec.ins_srtdeel_nr || '/' || rec.ins_srtdeel_omschrijving || ' is toegevoegd', ''); ccount := ccount + 1; EXCEPTION WHEN DUP_VAL_ON_INDEX THEN v_errormsg := 'Artikelnummer dubbel in importbestand'; fac.imp_writelog (p_import_key, 'W', v_aanduiding || v_errormsg, ''); 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; fac.imp_writelog ( p_import_key, 'S', v_aanduiding || 'Er zijn ' || TO_CHAR (ccount) || ' artikelen toegevoegd', ''); COMMIT; END; BEGIN -- Doorloop alle catalogi/ bedrijven. Er kunnen er in theorie meerdere tegelijk zijn FOR rec IN (SELECT DISTINCT ins_discipline_key, prs_bedrijf_key FROM pdkl_imp_catalogus WHERE fac_import_key = p_import_key) LOOP BEGIN -- Puur voor logging toch even catalogus- en bedrijfsnaam bepalen! v_aanduiding := '[' || TO_CHAR (rec.ins_discipline_key) || '] '; v_errormsg := 'Fout bepalen catalogus'; SELECT ins_discipline_omschrijving INTO v_disc_oms FROM ins_tab_discipline WHERE ins_discipline_key = rec.ins_discipline_key; v_aanduiding := '[' || TO_CHAR (rec.prs_bedrijf_key) || '] '; v_errormsg := 'Fout bepalen bedrijf'; SELECT prs_bedrijf_naam INTO v_bedr_naam FROM prs_v_aanwezigbedrijf WHERE prs_bedrijf_key = rec.prs_bedrijf_key; fac.imp_writelog ( p_import_key, 'I', 'Import van catalogus ' || v_disc_oms || '/' || v_bedr_naam, 'discipline: ' || rec.ins_discipline_key || ', bedrijf: ' || rec.prs_bedrijf_key); COMMIT; v_aanduiding := '[' || v_disc_oms || '|' || v_bedr_naam || '] '; l_update_catalogus (rec.ins_discipline_key, rec.prs_bedrijf_key); 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, ''); COMMIT; END; END LOOP; 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, 'Verwerken catalogus afgebroken!'); END pdkl_update_catalogus; / ------ 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