FCLT#69983 Uniforme CSV importfunctie
svn path=/Database/trunk/; revision=55781
This commit is contained in:
@@ -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)
|
||||
|
||||
126
FAC/FAC_PACF.SRC
126
FAC/FAC_PACF.SRC
@@ -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
|
||||
|
||||
@@ -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)
|
||||
(
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
Reference in New Issue
Block a user