Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Zero Cool SP

Importar arquivo TXT

Recommended Posts

Queria saber a maneira mais prática de importar um arquivo txt pra dentro de um banco, através do form ou através de uma procedure PL/SQL no banco, e se alguem tiver alguns comandos para me passar, ou algum exemplo, desde já agradeço!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não tenho certeza absoluta, mas parece que esse pacote só tem no 9. Bom eu uso o 6i aqui, to meio atrazado...e outra coisa, não tem nenhum função que eu possa fazer isso através de uma procedure no banco ou então através do forms??

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não sei se a versão 6 tem este pacote e não conheço Forms.

 

Em geral o uso de utl_file é simples , ler um arquivo texto e jogar os dados no banco.

 

Exemplo para um aquivo texto com cpf e data nascimento dando carga numa tabela.

 

CREATE OR REPLACE PROCEDURE exemplo (pRetorno out varchar2) IS
--
-- carga do exemplo
--
  -- Tipos para tratamento do registro do arquivo
  TYPE TRecArqDet IS RECORD(cpf	number(11),
							DtNasc   date);
  -- Auxiliares
  aArquivo	SYS.UTL_FILE.FILE_TYPE;
  sArq		varchar2(40) := 'EXEMPLO.TXT';
  bFim		boolean;
  sLinhaArq   varchar2(4000);
  sCaminho	varchar2(100);
  sFase	   char(2);
  rRecArqDet  TRecArqDet;
  --
  -- Formata o registro do arquivo
  function Detalhe(s in varchar2) return TRecArqDet is
	sai TRecArqDet;
  begin
	sai.cpf	:= To_number(Substr(s,1,11); /*07*/
	sai.DtNasc	  := to_date(Substr(s,12,8),'yyyymmdd');   
	Return sai;
  end;
  
BEGIN
  sFase:= '01';
  --Define caminho conforme o Ambiente
  sCaminho := '/utl'; -- INFORME AQUI O CAMINHO DO UTL 
  -- Abre arquivo p/ criticar arquivo
  sFase:= '02';
  aArquivo := Sys.Utl_file.Fopen(sCaminho,sArq,'r');
  sFase:= '03';
  bFim := False;
  While Not (bFim) Loop
	Begin
	  SYS.UTL_FILE.Get_Line(aArquivo,sLinhaArq);
	  sFase:= '04';
	  rRecArqDet := Detalhe(sLinhaArq);	
	Exception
	  When no_data_found then
		bFim := True;
	  When Others then
		Raise;
	End;
  End loop;
  SYS.UTL_FILE.FCLOSE(aArquivo);
  -- Abertura p/ carga banco
  sFase:= '06';
  aArquivo := Sys.Utl_file.Fopen(sCaminho,sArq,'r');
  -- Loop carga
  sFase:= '07';
  -- Limpa a tabela
  delete from exemplo;
  commit;
  sFase:= '08';
  bFim := False;
  While Not (bFim) Loop
	Begin
	  SYS.UTL_FILE.Get_Line(aArquivo,sLinhaArq);
	  rRecArqDet := Detalhe(sLinhaArq);
	  Insert Into exemplo
		(cpf,data_nascimento)
	  Values
		(rRecArqDet.cpf,rRecArqDet.DtNasc);
	Exception
	  When no_data_found then
		bFim:= True;
	  When Others then
		Raise;
	End;
  End loop;
  SYS.UTL_FILE.FCLOSE(aArquivo);
  sFase:= '09';
  Commit;
EXCEPTION
	WHEN others THEN
		RollBack;
		pRetorno := SubStr('Erro fase ' || sFase ||
					' Linha ' || SubStr(sLinhaArq,1,20) ||
					' Erro Oracle ' || SQLERRM(SQLCODE),1,255);
END; -- Procedure
/

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não tenho certeza absoluta, mas parece que esse pacote só tem no 9. Bom eu uso o 6i aqui, to meio atrazado...e outra coisa, não tem nenhum função que eu possa fazer isso através de uma procedure no banco ou então através do forms??

Isso mesmo, somente na versão 9.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Na 8 já tinha, na 7 não estou certo mas creio que também tinha.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom galera, dei uma pesquisada por ae e descobri a função text_io, só que estou com alguns probleminhas ainda, será que alguem ai tem algum tutorial disso, ou manja alguma coisa pra poder tar dando uma explicadinha, valew!

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.