FCLT#69983 Uniforme CSV importfunctie

svn path=/Database/trunk/; revision=55781
This commit is contained in:
Jos Groot Lipman
2022-05-04 21:06:44 +00:00
parent a901032fae
commit 4b7e10fe32
4 changed files with 131 additions and 2 deletions

View File

@@ -2365,6 +2365,7 @@ DEF_IMPORT('WEB_PRSSYS', 'BEDRIJFADRES', 'FIP: Aanvullen technische bedri
DEF_IMPORT('WEB_LCLSYS', 'TRANSLATION', 'Import of FACILITOR translation file', 'Import of FACILITOR translation file')
DEF_IMPORT('WEB_PRSSYS', 'KPN', 'FIP: Aanmaken/bijwerken van kostenplaatsen', 'FIP: Create/Update cost centres')
DEF_IMPORT('WEB_FACFAC', 'CSV', 'FIP: Generieke CSV import', 'FIP: Generic CSV import')
INSERT INTO fac_qlikview
(fac_qlikview_omschrijving, fac_qlikview_qvw_name, fac_functie_key)

View File

@@ -14,6 +14,132 @@
* evt nodige functies en procedures moeten lokaal of generiek toepasbaar worden gedefinieerd
*/
-- Generieke procedure om csv-regels uit FAC_IMP_FILE
-- te splitsen naar losse kolommen in FAC_IMP_CSV
CREATE OR REPLACE PROCEDURE fac_import_file2csv (p_import_key IN NUMBER)
AS
CURSOR c1
IS
SELECT fac_imp_file_index, fac_imp_file_line
FROM fac_imp_file
WHERE fac_import_key = p_import_key
ORDER BY fac_imp_file_index;
c_delim VARCHAR2 (1);
v_newline fac_imp_file.fac_imp_file_line%TYPE; -- Input line
v_errorhint VARCHAR2 (1000);
TYPE array_t IS VARRAY (100) OF VARCHAR2 (4000);
a_fields array_t := array_t ();
rec_count fac_imp_csv.fac_imp_csv_index%TYPE;
collist VARCHAR2 (4000);
fldlist VARCHAR2 (4000);
l_cursor INTEGER DEFAULT DBMS_SQL.open_cursor;
l_sql VARCHAR2 (4000);
returnValue PLS_INTEGER;
BEGIN
SELECT COALESCE (fac_import_app_delimiter, ';')
INTO c_delim
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;
rec_count := 0;
FOR rec IN c1
LOOP
v_errorhint := 'Fout bij splitsen csv regel';
v_newline := rec.fac_imp_file_line;
IF TRIM (REPLACE (v_newline, c_delim, '')) IS NULL -- geen lege regels
THEN
CONTINUE;
END IF;
rec_count := rec_count + 1;
FOR f IN 1 .. 100
LOOP
IF (rec_count = 1) -- eerste (header) regel bepaalt het aantal kolommen
THEN
IF (a_fields.COUNT = 100)
THEN
RAISE_APPLICATION_ERROR (-20000, 'More than ' || a_fields.COUNT || ' columns in csv');
END IF;
a_fields.EXTEND;
collist := collist || ', fac_imp_csv_col' || CASE WHEN f < 10 THEN '0' ELSE '' END || f;
fldlist := fldlist || ', :a_fields' || f;
ELSIF f > a_fields.COUNT
THEN
CONTINUE;
END IF;
fac.imp_getfield (v_newline, c_delim, a_fields (f));
IF v_newline IS NULL -- klaar met deze regel
THEN
EXIT;
END IF;
END LOOP;
IF (rec_count = 1)
THEN
DBMS_OUTPUT.Put_line ('Detected ' || a_fields.COUNT || ' columns in csv');
fac.imp_writelog (p_import_key,
'I',
'Detected ' || a_fields.COUNT || ' columns in csv',
'');
l_sql :=
'INSERT INTO fac_imp_csv (fac_import_key, fac_imp_csv_index'
|| collist
|| ') VALUES (:import_key, :rec_count'
|| fldlist
|| ')';
--DBMS_OUTPUT.put_line (l_sql);
DBMS_SQL.parse (l_cursor, l_sql, DBMS_SQL.native);
DBMS_SQL.bind_variable (l_cursor, ':import_key', p_import_key);
DBMS_SQL.bind_variable (l_cursor, ':rec_count', rec_count);
END IF;
FOR f IN 1 .. a_fields.COUNT
LOOP
DBMS_SQL.bind_variable (l_cursor, ':a_fields' || f, a_fields (f));
END LOOP;
returnValue := DBMS_SQL.execute (l_cursor);
END LOOP;
IF (rec_count > 0)
THEN
DBMS_SQL.close_cursor (l_cursor);
END IF;
fac.imp_writelog (p_import_key,
'S',
'Converted ' || rec_count || ' csv lines',
'');
EXCEPTION
WHEN OTHERS
THEN
fac.imp_writelog (p_import_key,
'E',
'ORACLE (error ' || SQLCODE || '/' || SUBSTR (SQLERRM, 1, 200) || ')',
v_errorhint);
END;
/
CREATE OR REPLACE PROCEDURE fac_import_csv (
p_import_key IN NUMBER
)
IS
BEGIN
fac_import_file2csv(p_import_key);
END;
/
-- Procedures om catalogi in te lezen en te verwerken
CREATE OR REPLACE PROCEDURE fac_import_catalogus (
p_import_key IN NUMBER

View File

@@ -969,7 +969,7 @@ CREATE_TABLE(fac_imp_csv, 0)
fac_imp_csv_col97 VARCHAR2(4000),
fac_imp_csv_col98 VARCHAR2(4000),
fac_imp_csv_col99 VARCHAR2(4000)
}
);
CREATE_TABLE(fac_imp_catalogus, 0)
(

View File

@@ -360,7 +360,9 @@ CREATE_TABLE(fac_imp_csv, 0)
fac_imp_csv_col97 VARCHAR2(4000),
fac_imp_csv_col98 VARCHAR2(4000),
fac_imp_csv_col99 VARCHAR2(4000)
}
);
DEF_IMPORT('WEB_FACFAC', 'CSV', 'FIP: Generieke CSV import', 'FIP: Generic CSV import')
/////////////////////////////////////////////////////////////////////////////////////////// FCLT#00000