Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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!!
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??
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; RollBack;
pRetorno := SubStr('Erro fase ' || sFase ||
' Linha ' || SubStr(sLinhaArq,1,20) ||
' Erro Oracle ' || SQLERRM(SQLCODE),1,255);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.
Na 8 já tinha, na 7 não estou certo mas creio que também tinha.
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!
Veja nesta página :
http://www.imasters.com.br/artigo/971/oracle/utl_file/
E outros artigos.
Creio que vai te ajudar.