tenho um arquivo no servidor com 2 linhas (montei apenas para teste).
o arquivo é do tipo csv e o mesmo contém 6 campos separados por ";"
eu criei uma rotina pra "quebrar" esses campos e armazenar numa variável do tipo TYPE.
porém eu só consigo fazer essa quebra em apenas uma linha do arquivo. A segunda linha se repete.
alguém já fez alguma rotina parecida?!
segue o código que eu fiz.
DECLARE
l_uFile utl_file.file_type; --> Identificador do Arquivo
l_vFile_Name VARCHAR2(100); --> Nome do arquivo a ser lido
l_vFile_Path VARCHAR2(100); --> Caminho do arquivo
l_vBuffer VARCHAR2(32767); --> variável reponsável por receber os dados do arquivo
--
TYPE type_tab IS TABLE OF VARCHAR2(10) INDEX BY BINARY_INTEGER;
v_type_tab type_tab;
v_string_aux VARCHAR2(100);
v_pos NUMBER := 1;
v_indx NUMBER := 1;
BEGIN
l_vFile_Name := 'teste.csv';
l_vFile_Path := 'ODPDIR';
--
--> abrindo arquivo para leitura
--
l_uFile := utl_file.fopen(l_vFile_Path, l_vFile_Name, 'R');
LOOP
utl_file.get_line(l_uFile, l_vBuffer);
--
/* IF substr(l_vBuffer,length(l_vBuffer) - 1,1) != ';' THEN
l_vBuffer := l_vBuffer|| ';';
END IF;
*/ --
FOR i IN 1.. length(l_vBuffer) LOOP
v_string_aux := SUBSTR(l_vBuffer,v_pos,((INSTR(l_vBuffer,';',1,v_indx)) - v_pos));
v_pos := INSTR(l_vBuffer,';',1,v_indx) + 1;
--
v_type_tab(v_indx) := v_string_aux;
v_indx := v_indx + 1;
END LOOP;
--
IF v_type_tab.COUNT > 0 THEN
FOR r_vet IN v_type_tab.FIRST..v_type_tab.LAST LOOP
dbms_output.put_line(v_type_tab(r_vet));
END LOOP;
END IF;
--
END LOOP;
--
UTL_FILE.fclose(l_uFile);
--
END;
36968
AF.CONECTI
4523
-23502,86
1
36968 ---> os dados da primeira linha se repetem
AF.CONECTI
4523
-23502,86
1