Problemas com importação de txt

Dicas do Oracle Forms Builder - Blocos, Itens, LOV, Canvas, Triggers, comandos, PLL, d2kwutil, FMB, Alert, menus, etc
Responder
NetBus
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 15
Registrado em: Seg, 15 Out 2007 11:00 am
Localização: São Paulo

Galera estou tendo um serio problema com este codigo....
aparentemente pode estar correto, eu pelo menos não vejo erros.

segue:

Selecionar tudo

procedure importa is
begin
DECLARE 
     filename VARCHAR2(30000); 
     Arq text_io.file_type; 
     v_linha varchar2(30000); 
BEGIN 
     filename := GET_FILE_NAME(File_Filter=> 'Files (*.txt)|*.txt|'); 
loop 
     arq:= Text_IO.Fopen('filename','R'); 
     Text_IO.Get_Line(arq,v_linha); 
     
INSERT INTO PM_PATRIMONIOS_NOVOS 
(PATRI_ANTIGO,
PATRI_ATUAL,  
DAT_TOMB,     
COD_STATUS,   
COD_SETOR,    
COD_UNIDADE,  
COD_CONSERV,  
SIT_PATRI,    
COD_MATERIAL, 
COD_BAIX_TIP, 
PATRI_SIT_REG,
ENCONTRADO,   
RESP_MATRI,   
RESPONSAVEL,  
SIT_REG) 
VALUES 
(substr(v_linha,1,10),   -- código patrimonio antigo
substr(v_linha,11,10),   -- código patrimonio atual
substr(v_linha,21,8),    -- data tombamento
substr(v_linha,29,2),    -- cod status	
substr(v_linha,31,10),   -- codigo do setor
substr(v_linha,41,10),   -- codigo da unidade	
substr(v_linha,51,2),    -- codigo conservação
substr(v_linha,53,1),    -- situação patrimonio
substr(v_linha,54,10),   -- codigo material
substr(v_linha,64,1),    --codigo tipo baixa
substr(v_linha,65,1),    -- I importado sicop V inventariado N item novo.
substr(v_linha,66,1),    --encontrado
substr(v_linha,67,10),   --responsavel matricula.
substr(v_linha,77,100),  --responsavel
substr(v_linha,177,15));  --situação registro
end loop;
exception when no_data_found then 
	message('Arquivos não encontrados');
--	when others then 
--	message('Há erros no arquivo *txt* ');
end;
end;
oque acontece, ocorre o erro ->

FRM-40735: o gatilho when-button-pressed levantou a exceção ora-302000 não manipulada.

estou fazendo algo errado????
Trevisolli
Moderador
Moderador
Mensagens: 2016
Registrado em: Qua, 12 Jan 2005 3:25 pm
Localização: Araraquara - SP
Abraço,

Trevisolli
OCA Oracle PL/SQL Developer Certified Associate
OCP Oracle Forms Developer Certified Professional
Araraquara-SP

Brother,

Um caso possível de erro, é este aqui:

Selecionar tudo

arq:= Text_IO.Fopen('filename','R'); 
Altere da forma abaixo (sem aspas no filename) e faça outro teste:

Selecionar tudo

arq:= Text_IO.Fopen(filename,'R'); 
NetBus
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 15
Registrado em: Seg, 15 Out 2007 11:00 am
Localização: São Paulo

Nada meu velho a mesma coisa ....

so que parece que ajudou retirar as aspas pos agora ele esta demorando um pouco mais para obter erro...

tipo era clicar no botao dava erro, agora demora sei la cerca de 2 segundos....estranho né??
Trevisolli
Moderador
Moderador
Mensagens: 2016
Registrado em: Qua, 12 Jan 2005 3:25 pm
Localização: Araraquara - SP
Abraço,

Trevisolli
OCA Oracle PL/SQL Developer Certified Associate
OCP Oracle Forms Developer Certified Professional
Araraquara-SP

Brother,

Faz um outro teste.
Coloca tua exception de when-others, pra exibir o código do erro:

Selecionar tudo

 when others then 
 message('Há erros no arquivo *txt* ' || SQLERRM); 
E veja se a mensagem é mais clara neste ponto.
qualquer coisa manda ai.
NetBus
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 15
Registrado em: Seg, 15 Out 2007 11:00 am
Localização: São Paulo

saca só ...

deu a minha mensagen e a mesma mesnsagem de antes com SQLERRM
302000: nom-oracle exception...

ta muito estranho acho que este loop ta zuado....a substr esta correto já olhei mais de 10vz a tabela e os types batem -- e o filho de uma mae continua dando este erro doido...
Trevisolli
Moderador
Moderador
Mensagens: 2016
Registrado em: Qua, 12 Jan 2005 3:25 pm
Localização: Araraquara - SP
Abraço,

Trevisolli
OCA Oracle PL/SQL Developer Certified Associate
OCP Oracle Forms Developer Certified Professional
Araraquara-SP

Um outro teste que pode estar fazendo, brother...
É verificar os datatypes que vem vindo, e os da tabela...

Na tua exception, exiba os valores...

Selecionar tudo

... 
substr(v_linha,1,10), -- código patrimonio antigo 
substr(v_linha,11,10), -- código patrimonio atual 
substr(v_linha,21,8), -- data tombamento 
substr(v_linha,29,2), -- cod status 
substr(v_linha,31,10), -- codigo do setor  ...
E compare com os da tua tabela... pode ser por aí....
NetBus
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 15
Registrado em: Seg, 15 Out 2007 11:00 am
Localização: São Paulo

cara sera que ....eu tenho alguns campos varchar2... e tipo sera que tenho que concatenar eles para fazer este insert...tipo assim!

Selecionar tudo

''|| substr(v_linha,77,100) ||'',  -- responsavel
eu não lembro fazer isso ou então sei la ....
dar um varlor de variavel...

Selecionar tudo

resp := ||''substr(v_linha,77,100)||'',
so não sei se é assim que concatena este tipo de dados sendo string;;...
Avatar do usuário
dr_gori
Moderador
Moderador
Mensagens: 5024
Registrado em: Seg, 03 Mai 2004 3:08 pm
Localização: Portland, OR USA
Contato:
Thomas F. G

Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered

Pois é, tira o INSERT, deixa só o TEXT_IO !
Daí você descobre se o problema é com ele.
Outra coisa: Mostra na tela o conteúdo de filename pra ver se está vindo direitinho.
Trevisolli
Moderador
Moderador
Mensagens: 2016
Registrado em: Qua, 12 Jan 2005 3:25 pm
Localização: Araraquara - SP
Abraço,

Trevisolli
OCA Oracle PL/SQL Developer Certified Associate
OCP Oracle Forms Developer Certified Professional
Araraquara-SP

Brother,

Segue um exemplo de concatenação da string:

Selecionar tudo


DECLARE 
   v_responsavel VARCHAR2(100) := 'Trevisolli';
BEGIN
   dbms_output.put_line('Responsável: ' || v_responsavel || ' pela informação.'); 
END ;   
Nota: Ative o spool de saída antes (SET SERVEROUTPUT ON).
NetBus
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 15
Registrado em: Seg, 15 Out 2007 11:00 am
Localização: São Paulo

então eu tenho uma procedure chamada mostra ...
que é para isso mesmo ...
so que não funciona ....sei la porque so neste programa que estou fazendo estou precisando desta m***a e ela não funciona
dbms...tambem não funciona,(com spool aberto).
o problema esta no loop ou no arquivo que não esta trazendo nada....
tem hora que ate não da erro ...mais tambem não inseri nada tambem...
forms é legal ....mais vsf....tem que se bom para mexer...
ho querido valeu pelo exemplo de string ....
mais uma hora eu mato isso....so faz um mês que estou mexendo rsrs
Tineks
Rank: DBA Sênior
Rank: DBA Sênior
Mensagens: 365
Registrado em: Ter, 24 Mai 2005 2:24 pm
Localização: Araraquara - SP
Cristiano (Tineks)
Araraquara - SP

NetBus,

acredito q o problema esteja nesse ponto aqui.

Selecionar tudo

   loop 
   arq:= Text_IO.Fopen(filename,'R'); 
dessa forma pra cada loop realizado o arquivo está sendo aberto novamente, jogue o arq pra antes do loop e faça um teste.

Selecionar tudo

   arq:= Text_IO.Fopen(filename,'R'); 
   loop 
obs: use sem as aspas.

[]s
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Nenhum usuário registrado e 8 visitantes