return: text lang: plpgsql parameters: p0: type: bigint name: i_import_id p1: type: text name: i_file src: | DECLARE _file_code TEXT; file TEXT; result TEXT; _i INT; BEGIN RAISE NOTICE '%' , 'Creation table de travail'; _file_code = upper((string_to_array(i_file,'.'))[array_upper(string_to_array(i_file,'.'),1)-1]); IF NOT EXISTS (SELECT * FROM pg_class WHERE relnamespace = pg_my_temp_schema() AND relname = 'w_mat2a_data') THEN DROP TABLE IF EXISTS w_mat2a_data; DROP SEQUENCE IF EXISTS w_mat2a_data_seq; CREATE TEMP SEQUENCE w_mat2a_data_seq INCREMENT BY 100; CREATE TEMP TABLE w_mat2a_data ( data text, sequence bigint DEFAULT nextval('w_mat2a_data_seq'::regclass), table_sequence numeric default 0, title_sequence numeric default 0, header_sequence numeric default 0, row_sequence numeric default 0, line_type text, columns text[] ); CREATE INDEX i_w_mat2a_data ON w_mat2a_data USING btree (sequence); END IF; TRUNCATE w_mat2a_data; RAISE NOTICE '%' , 'Copie des donnees'; file = replace(i_file,chr(92),'/'); BEGIN EXECUTE ('COPY w_mat2a_data (data) FROM ''' || file || ''' WITH DELIMITER AS E''' || chr(92) || '01'''); EXCEPTION WHEN others THEN RAISE NOTICE 'Erreur %' , 'Fichier ' || file || ' incompatible'; return 'KO. Fichier ' || file || ' incompatible'; END; RAISE NOTICE '%' , 'Analyse'; RAISE NOTICE '%' , 'Analyse. Suppression des lignes inutiles'; -- DELETE FROM w_mat2a_data USING ( SELECT MAX(CASE WHEN data ILIKE '' THEN sequence ELSE NULL END) AS sequence_min, MAX(CASE WHEN data ILIKE '' THEN sequence ELSE NULL END) AS sequence_max FROM w_mat2a_data WHERE data ILIKE '' OR data ILIKE '' ) subview WHERE sequence BETWEEN sequence_min AND sequence_max; -- PERFORM base.cti_execute( 'DELETE FROM w_mat2a_data USING ( SELECT MAX(CASE WHEN data ILIKE '''' THEN sequence ELSE NULL END) AS sequence_min, MAX(CASE WHEN data ILIKE '''' THEN sequence ELSE NULL END) AS sequence_max FROM w_mat2a_data WHERE data ILIKE '''' OR data ILIKE '''' ) subview WHERE sequence BETWEEN sequence_min AND sequence_max',10); -- 2024 DELETE FROM w_mat2a_data WHERE data ILIKE '%' AND data ilike '%' ; -- ' THEN sequence ELSE NULL END) AS sequence_max FROM w_mat2a_data WHERE data ILIKE '' ) subview WHERE sequence BETWEEN sequence_min AND sequence_max; -- Conversion nouveau format 2024 comme ancien format INSERT INTO w_mat2a_data(data, sequence) SELECT CASE WHEN data LIKE '
%' ) ) subview ON sequence BETWEEN sequence_min AND sequence_max AND (data LIKE '
%' ) ) subview ON sequence BETWEEN sequence_min AND sequence_max AND data LIKE '

'::text AS data, sequence+3 AS sequence FROM w_mat2a_data JOIN ( SELECT CASE WHEN data LIKE '

0 ORDER BY sequence ) subview WHERE title_sequence = subview.table_sequence; -- Type des lignes UPDATE w_mat2a_data SET line_type = CASE WHEN data like '%' THEN 'H' WHEN sequence IN (SELECT row_sequence FROM w_mat2a_data WHERE sequence <> 0 AND data LIKE '
%' GROUP BY 1,2 ) subview WHERE w_mat2a_data.sequence = subview.table_sequence; RAISE NOTICE '%' , 'Analyse. Renumerotation des sequences'; -- Sequence de table à partir de 1 UPDATE w_mat2a_data SET table_sequence = i FROM ( SELECT i, tables_array[i] As table_sequence FROM ( SELECT tables_array, generate_series(array_lower(tables_array,1),array_upper(tables_array,1)) AS i FROM ( SELECT base.cti_group_array3(table_sequence) AS tables_array FROM ( SELECT table_sequence FROM w_mat2a_data WHERE line_type = 'T' ORDER BY sequence ) subview ) subview ) subview ) subview WHERE w_mat2a_data.table_sequence = subview.table_sequence; -- Sequence de ligne à partir de 1 par table UPDATE w_mat2a_data SET row_sequence = i FROM ( SELECT i, rows_array[i] As row_sequence FROM ( SELECT rows_array, generate_series(array_lower(rows_array,1),array_upper(rows_array,1)) AS i FROM ( SELECT table_sequence, base.cti_group_array3(row_sequence) AS rows_array FROM ( SELECT table_sequence, row_sequence FROM w_mat2a_data WHERE line_type IN ('D','F') ORDER BY sequence ) subview GROUP BY 1 ) subview ) subview ) subview WHERE w_mat2a_data.row_sequence = subview.row_sequence; RAISE NOTICE '%' , 'Conversion numerique'; FOR _i IN SELECT generate_series(1,(select max(array_upper(columns,1)) from w_mat2a_data)) LOOP UPDATE w_mat2a_data SET columns[_i] = trim( CASE WHEN base.cti_is_num(columns[_i]) THEN replace(replace(columns[_i],' ',''),',','.') ELSE columns[_i] END ) WHERE columns[_i] <> trim( CASE WHEN base.cti_is_num(columns[_i]) THEN replace(replace(columns[_i],' ',''),',','.') ELSE columns[_i] END ); END LOOP; RAISE NOTICE '%' , 'Ajout à la table p_mat2a_data'; DELETE FROM pmsi.p_mat2a_data WHERE mat2a_import_id = i_import_id AND file_code = _file_code; INSERT INTO pmsi.p_mat2a_data (mat2a_import_id, file_code, table_sequence, row_sequence, line_type, data_mat2a) SELECT i_import_id, _file_code, table_sequence, row_sequence, line_type, columns FROM w_mat2a_data WHERE columns IS NOT NULL AND table_sequence NOT IN (SELECT table_sequence FROM w_mat2a_data WHERE data LIKE '