agora vai,. abraço
Selecionar tudo
declare
Vlinha Varchar2(2000);
v_File_Handle Utl_File.File_Type;
vLinhaAux Varchar2(2000);
vCont Number := 1;
valor Varchar2(500);
type arq_bb_type is record
(CD_BANCO VARCHAR2(100),
SG_UF VARCHAR2(100),
CD_MODALIDADE_ATIVA VARCHAR2(100),
CD_FINALIDADE VARCHAR2(100),
CD_FONTE_RECURSO VARCHAR2(100),
QT_CONTRATOS VARCHAR2(100),
VL_SALDO_DEVEDOR VARCHAR2(100),
QT_CONTRATOS_VENCIDOS VARCHAR2(100),
VL_SALDO_DEVEDOR_VENCIDO VARCHAR2(100),
QT_VENC_MAIS_90_DIAS VARCHAR2(100),
VL_SALDO_DEVEDOR_VENC_90_DIAS VARCHAR2(100),
VL_RETORNO_PREVISTO VARCHAR2(100),
CD_RISCO VARCHAR2(100),
DT_BASE VARCHAR2(100),
DH_CARGA VARCHAR2(100),
VL_RETORNO_VENCIDO VARCHAR2(100),
CD_CLASSIFICACAO VARCHAR2(100));
linha arq_bb_type;
--- Abre arquivo txt para leitura
--v_File_Handle := Utl_File.Fopen('C:\Cleber', 'teste.txt', 'r');
-- o nome do arquivo tem que vir dinamico. cada mês é um nome diferente porque vem pela data do mês.
-- Loop para Ler o Arquivo Txt
--Loop
Begin
--linha.delete; --sempre limpa o vetor
-- Ler o arquivo
--Utl_File.Get_Line(v_File_Handle, Vlinha);
vLinha := '"ESTOQUE DE DÍVIDAS";"001 - BB";"SP";"FUNCAFE CPR";"AGRÍCOLA";"FUNCAFÉ";6;1166502,91;2,00;65911,56;0,00;0,00;281162,54;"PRÓPRIO BB";"09/11/2009";"30/10/2009"';
vLinhaAux := vLinha;
while (instr(vLinhaAux,';') > 0) loop
valor := replace(replace(trim(substr(vLinhaAux,1,instr(vLinhaAux,';')-1)),' '),chr(10));
if (vCont = 1) Then
linha.CD_BANCO := valor;
elsif (vCont = 2) then
linha.SG_UF := valor;
elsif (vCont = 3) then
linha.CD_MODALIDADE_ATIVA := valor; --aqui você trata todos os seus campos
elsif (vCont = 4) then
linha.CD_FINALIDADE := valor;
elsif (vCont = 5) then
linha.CD_FONTE_RECURSO := valor;
elsif (vCont = 6) then
linha.QT_CONTRATOS := valor;
elsif (vCont = 7) then
linha.VL_SALDO_DEVEDOR := valor;
elsif (vCont = 8) then
linha.QT_CONTRATOS_VENCIDOS := valor;
elsif (vCont = 9) then
linha.VL_SALDO_DEVEDOR_VENCIDO := valor;
elsif (vCont = 10) then
linha.QT_VENC_MAIS_90_DIAS := valor;
elsif (vCont = 11) then
linha.VL_SALDO_DEVEDOR_VENC_90_DIAS := valor;
elsif (vCont = 12) then
linha.CD_RISCO := valor;
elsif (vCont = 13) then
linha.DT_BASE := valor;
elsif (vCont = 14) then
linha.DH_CARGA := valor;
elsif (vCont = 15) then
linha.CD_CLASSIFICACAO := valor;
end if;
vLinhaAux := substr(vLinhaAux,instr(vLinhaAux,';')+1,length(vLinhaAux));
vCont := vCont + 1;
end loop;
dbms_output.put_line(linha.Cd_Classificacao);
dbms_output.put_line(linha.cd_banco);
dbms_output.put_line(linha.Sg_Uf);
dbms_output.put_line(linha.Cd_Modalidade_Ativa);
dbms_output.put_line(linha.Cd_Finalidade);
dbms_output.put_line(linha.Cd_Fonte_Recurso);
/*
-- grava o arquivo na tabela
Insert Into t_Bb_Ativa (Cd_Classificacao,
Cd_Banco,
Sg_Uf,
Cd_Modalidade_Ativa,
Cd_Finalidade,
Cd_Fonte_Recurso,
Qt_Contratos,
Vl_Saldo_Devedor,
Qt_Contratos_Vencidos,
Vl_Saldo_Devedor_Vencido,
Qt_Venc_Mais_90_Dias,
Vl_Saldo_Devedor_Venc_90_Dias,
Vl_Retorno_Previsto,
Cd_Risco,
Dt_Base,
Dh_Carga,
Vl_Retorno_Vencido)
Values (linha(1).Cd_Classificacao,
linha(1).cd_banco,
linha(1).Sg_Uf,
linha(1).Cd_Modalidade_Ativa,
linha(1).Cd_Finalidade,
linha(1).Cd_Fonte_Recurso,
linha(1).Qt_Contratos,
linha(1).Vl_Saldo_Devedor,
linha(1).Qt_Contratos_Vencidos,
linha(1).Vl_Saldo_Devedor_Vencido,
linha(1).Qt_Venc_Mais_90_Dias,
linha(1).Vl_Saldo_Devedor_Venc_90_Dias,
linha(1).Vl_Retorno_Previsto,
linha(1).Cd_Risco,
linha(1).Dt_Base,
linha(1).Dh_Carga,
linha(1).Vl_Retorno_Vencido);
Commit;*/
Exception
--When No_Data_Found Then
-- arquivo não encontrado
-- exit;
When Value_Error Then
-- linha do arquivo muito grande para armazenar.
Raise_Application_Error(-20214, 'Value_Error '||sqlerrm);
When Utl_File.Invalid_FileHandle Then
-- arquivo não válido
Raise_Application_Error(-20215, 'Invalid_filehandle '||sqlerrm);
When Utl_File.Invalid_Operation Then
-- arquivo não está aberto para leitura
Raise_Application_Error(-20216, 'invalid_operation '||sqlerrm);
When Utl_File.Read_Error Then
-- erro durante a leitura
Raise_Application_Error(-20217, 'Read_Error '||sqlerrm);
end;
--End Loop;
--Utl_File.FClose(v_file_handle);
--end;