caebus 0 Denunciar post Postado Outubro 16, 2008 Bom dia a todos, Preciso importar um arquivo texto delimitado(.csv) para uma tabela do oracle. Atualmente tenho o seguinte script que funcionaria com colunas de tamanho fixo. Alguém pode me ajudar a ajustá-lo para interpretar colunas delimitadas? Obrigado -------------------------------------------------- declare v_indice number := 0; v_linha VARCHAR2(3000); v_arq_log utl_file.file_type; -- arquivo saida v_caminho varchar2(50) := '/pr01001/PRDMIGOI/SAIDA/HISTCOR/MASTERSAF'; -- especifica o diretorio a ser gravado begin v_arq_log := utl_file.fopen(v_caminho,'claudio_costa.txt','r', 32767); -- abre arquivo LOOP BEGIN utl_file.get_line(v_arq_log, v_linha); dbms_output.put_line(v_linha); EXCEPTION WHEN OTHERS THEN dbms_output.put_line('3: '); dbms_output.put_line('erro: '||SQLERRM); EXIT; END; END LOOP; if utl_file.is_open(v_arq_log) then utl_file.fclose(v_arq_log); end if; -- if utl_file.is_open(v_arq_log) then EXCEPTION WHEN OTHERS THEN dbms_output.put_line('erro: '||SQLERRM); if utl_file.is_open(v_arq_log) then utl_file.fclose(v_arq_log); end if; end; Compartilhar este post Link para o post Compartilhar em outros sites
alphamek 2 Denunciar post Postado Outubro 20, 2008 Porque não utiliza o SQL*LOADER para realizar essa importação? Pois UTL_FILE vai deixar a sua importação mais LENTA, e deverá ter vários tratamentos. O SQL*LOADER tu apenas cria um arquivo de controle, específica os campos e depois realiza a importação. Abraços, Compartilhar este post Link para o post Compartilhar em outros sites
plock007 0 Denunciar post Postado Outubro 24, 2008 Bom dia a todos, Preciso importar um arquivo texto delimitado(.csv) para uma tabela do oracle. Atualmente tenho o seguinte script que funcionaria com colunas de tamanho fixo. Alguém pode me ajudar a ajustá-lo para interpretar colunas delimitadas? Obrigado -------------------------------------------------- declare v_indice number := 0; v_linha VARCHAR2(3000); v_arq_log utl_file.file_type; -- arquivo saida v_caminho varchar2(50) := '/pr01001/PRDMIGOI/SAIDA/HISTCOR/MASTERSAF'; -- especifica o diretorio a ser gravado begin v_arq_log := utl_file.fopen(v_caminho,'claudio_costa.txt','r', 32767); -- abre arquivo LOOP BEGIN utl_file.get_line(v_arq_log, v_linha); dbms_output.put_line(v_linha); EXCEPTION WHEN OTHERS THEN dbms_output.put_line('3: '); dbms_output.put_line('erro: '||SQLERRM); EXIT; END; END LOOP; if utl_file.is_open(v_arq_log) then utl_file.fclose(v_arq_log); end if; -- if utl_file.is_open(v_arq_log) then EXCEPTION WHEN OTHERS THEN dbms_output.put_line('erro: '||SQLERRM); if utl_file.is_open(v_arq_log) then utl_file.fclose(v_arq_log); end if; end; Boa noite, Fiz alguns Select's que podem te ajudar a desenvolver uma lógica para carregar esses dados que não são uniformes! Claro que isso só vai servir se você não usou o SQL*LOADER Select REPLACE(SUBSTR('01;700;São Paulo', 1, INSTR('01;700;São Paulo', ';')), ';', '') From Dual; -- Com esse 1º Select, eu estou retornando o valor '01' q seria meu 1º registro dentro da String '01;700;São Paulo' Select INSTR('01;700;São Paulo', ';') From Dual; -- Com esse 2º Select, eu busco em q posição se encontra meu 1º Delimitador (;). Nesse caso, na posição 3 Select REPLACE(SUBSTR('01;700;São Paulo', (3+1), INSTR(SUBSTR('01;700;São Paulo', (3+1)), ';')),';', '') From Dual; -- Nesse 3º Select, eu já busco meu 2º registro (700) da String. Com esse Select e o Select abaixo que vai somando em q posição ele vai encontrando os delimitadores, você pode fazer dentro de um Loop, caso você tenha que upar inúmeros registros pra tabela. Select INSTR(SUBSTR('01;700;São Paulo', (3+1)), ';') From Dual; -- Note que na função SUBSTR, a soma do 3+1 é devido ao fato do meu 1º Delimitador estar nessa posição (3) e agora eu preciso pegar desde o 4º caracter até o próximo delimitador. -- Soma do (3+4) = 7 Select SUBSTR('01;700;São Paulo', (7+1)) From Dual; -- esse último, serve para você pegar o último registro (São Paulo). Espero que isso não tenha ficado muito confuso e te ajude a desenvolver uma Proc de carga com UTL_FILE http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif Compartilhar este post Link para o post Compartilhar em outros sites