Estou trabalhando com PLSQL, porém ainda sou novato na área, e estou com uma certa dificuldade com importação de arquivos txt.
No caso, eu consigo ler e exibir as linhas do arquivo, porém o arquivo que eu vou receber se trata de 3 tipos de linhas diferentes (demografico, paciente, exames).
Ou seja, tem campos que estão recebendo o mesmo registro, pelo fato do UTL_File ao saltar de linha voltar a alimentar os campos novamente.
Gostaria de alguma dica de como posso ajustar meu código, lembrando que os campos que irei gravar dados diferentes são c_campo_5, c_campo_6 e c_campo_7.
Segue meu código:
declare
entrada_b2b_cerba UTL_File.File_Type := utl_file.fopen('Caminho','arquivo.TXT','r');
linha varchar2(1000);
c_campo_1 varchar2(05);
c_campo_2 varchar2(04);
c_campo_3 varchar2(10);
c_campo_4 varchar2(01);
c_campo_5 varchar2(100);
c_campo_5_1 varchar2(20);
c_campo_5_2 varchar2(20);
c_campo_6 varchar2(08);
c_campo_7 varchar2(50);
c_campo_8 varchar2(05);
posicao number (30);
eof boolean := false; -- FLAG QUE INDICA FIM DO ARQUIVO.
begin
-- ARMAZENA A LINHA DO ARQUIVO NA VARIÁVEL 'linha'
while not(eof) loop
-- posicao := INSTR(linha, '#');
begin
utl_file.get_line(entrada_b2b_cerba,linha);
posicao := instr(linha,'#');
c_campo_1 := substr(linha,1,posicao - 1);
linha := substr(linha,posicao + 1);
posicao := instr(linha,'#');
c_campo_2 := substr(linha,1,posicao - 1);
linha := substr(linha,posicao + 1);
posicao := instr(linha,'#');
c_campo_3 := substr(linha,1,posicao - 1);
linha := substr(linha,posicao + 1);
posicao := instr(linha,'#');
c_campo_4 := substr(linha,1,posicao - 1);
linha := substr(linha,posicao + 1);
posicao := instr(linha,'-');
c_campo_5_1 := substr(linha,1,posicao - 1);
linha := substr(linha,posicao + 1);
posicao := instr(linha,'-');
c_campo_5_2 := substr(linha,1,posicao - 1);
posicao := instr(linha,'#'); -- 53423-75489-19359781
c_campo_5 := substr(linha,1,posicao - 1);
linha := substr(linha,posicao + 1);
posicao := instr(linha,'#');
c_campo_6 := substr(linha,1,posicao - 1);
linha := substr(linha,posicao + 1);
posicao := instr(linha,'#');
c_campo_7 := substr(linha,1,posicao - 1);
linha := substr(linha,posicao + 13);
posicao := instr(linha,'#');
c_campo_8 := substr(linha,1,posicao - 1);
linha := substr(linha,posicao + 1);
exception
when no_data_found then
eof := true;
when others then
Raise_Application_Error(-20000,'ERRO: ' || SQLERRM);
end;
dbms_output.put_line(c_campo_1);
dbms_output.put_line(c_campo_2);
dbms_output.put_line(c_campo_3);
dbms_output.put_line(c_campo_4);
dbms_output.put_line(c_campo_5_1);
dbms_output.put_line(c_campo_5_2);
dbms_output.put_line(c_campo_5);
dbms_output.put_line(c_campo_6);
dbms_output.put_line(c_campo_7);
dbms_output.put_line(c_campo_8);
end loop;
end;