100501: non-Oracle exception

Dicas do Oracle Forms Builder - Blocos, Itens, LOV, Canvas, Triggers, comandos, PLL, d2kwutil, FMB, Alert, menus, etc
Responder
Hahu
Rank: Analista Sênior
Rank: Analista Sênior
Mensagens: 147
Registrado em: Qui, 16 Mar 2006 11:26 am
Localização: São Paulo
O mundo gira muito!!

bom dia Glufke,

tudo bom com vocês?

Informações adicionais:

Forms 6i
Reports 6i
DB 10g


amigos...é o seguinte, me deparei com a seguinte situação:


estou realizando uma manutenção em um forms, que contém o raise form_trigger_failure, dentro do when-button-pressed(Botão)!

...ao pressionar o botão, o forms realizar a contagem de registros ou melhor de linhas em uma determinada tabela : Tabela_A.

ele verifica se a quantidade contada está dentro da condição if, que se for maior que "zero", apresenta a mensagem: Aguarde por favor, enquanto outro usuário realiza a impressão. Ao clicarmos no botão "ok" da msg do "Aguarde", aparece o "100501: non-Oracle exception" :shock:! Alguém já passou por isto..:roll:?


Que Deus abençõe a todos!

Abs de seu amigo Hahu :wink:
schnu
Rank: Analista Pleno
Rank: Analista Pleno
Mensagens: 110
Registrado em: Ter, 24 Mai 2005 9:16 pm
Localização: Dongguan - Guangdong - China

Olá

teria como você colocar para a gente o codigo que você esta usando para fazer essa contagem dos registros ?





Nem tudo está perdido !!!
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,

Essa mensagem provavelmente é por ter o RAISE e estar sem nenhuma tratativa de exceção.

Teria como postar o código pra gente?
Hahu
Rank: Analista Sênior
Rank: Analista Sênior
Mensagens: 147
Registrado em: Qui, 16 Mar 2006 11:26 am
Localização: São Paulo
O mundo gira muito!!

bom dia Glufke,

segue as informações:

Selecionar tudo

 begin
    select count(*) v_contador from tabela_A;
    if nvl(v_contador,0) > 0 then
       l_msg('Aguarde por favor, enquanto outro usuário realiza a impressão.');
       raise form_trigger_failure;
    end if;
  
 exception
       when l_msd(sqlerrm);
       raise form_trigger_failure; 
 end;
Daeee...pensei em colocar um "return", após a msg?:roll:

Abs Hahu :wink:
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, beleza?

De qualquer forma faltou um INTO no teu select:

Selecionar tudo

 select count(*) INTO v_contador from tabela_A; 
ederphil
Rank: Programador Sênior
Rank: Programador Sênior
Mensagens: 52
Registrado em: Qua, 15 Out 2008 4:05 pm
Localização: taquara-RS

dae.. beleza?

cara da uma olhada no teu exception..

Selecionar tudo

 begin 
    select count(*) v_contador
       Into v_contador from tabela_A;
    if nvl(v_contador,0) > 0 then 
       l_msg('Aguarde por favor, enquanto outro usuário realiza a impressão.'); 
       raise form_trigger_failure; 
    end if; 
  
 exception 
       when l_msd(sqlerrm)    then 
       raise form_trigger_failure; 
 end;
Hahu
Rank: Analista Sênior
Rank: Analista Sênior
Mensagens: 147
Registrado em: Qui, 16 Mar 2006 11:26 am
Localização: São Paulo
O mundo gira muito!!

Fala Glufke,

...:oops: o l_msg, estava como l_msd :

então...em relação ao into, desculpe a gafe..hihih

Selecionar tudo


begin
 
  select count(*) into v_contador
    from tabela_A;
   --- 
   if nvl(v_contador,0) > 0 then
      l_msg('Aguarde por favor, enquanto outro usuário realiza a impressão.');
     raise form_trigger_failure;
   end if;

exception
     when l_msg(sqlerrm) then
     raise form_trigger_failure;
end;




acertei estas questões acima... eee ainda...poxa vida... essa msg continua, está fogo de ser resolvida... :(

o que significa: 100501: non-Oracle?

abs Hahu :wink:
ederphil
Rank: Programador Sênior
Rank: Programador Sênior
Mensagens: 52
Registrado em: Qua, 15 Out 2008 4:05 pm
Localização: taquara-RS

cara porque tu não faz diferente teu exception... é só uma idéia..

Selecionar tudo

begin 
  
  select count(*) into v_contador 
    from tabela_A; 
   --- 
   if nvl(v_contador,0) > 0 then 
      l_msg('Aguarde por favor, enquanto outro usuário realiza a impressão.'); 
     raise form_trigger_failure; 
   end if; 

exception 
     when other then
      message ('Aguarde por favor, enquanto outro usuário realiza a impressão.') ;
     raise form_trigger_failure; 
end; 



Hahu
Rank: Analista Sênior
Rank: Analista Sênior
Mensagens: 147
Registrado em: Qui, 16 Mar 2006 11:26 am
Localização: São Paulo
O mundo gira muito!!

Fala ederphil

obrigado pela dica...vou tentar..e posto em seguida :wink:

abs Hahu
calado
Rank: Estagiário Pleno
Rank: Estagiário Pleno
Mensagens: 5
Registrado em: Sáb, 28 Fev 2009 11:26 pm
Localização: Recife - PE
Tiago Calado
OCP Forms Developer
MV Sistemas
Recife - PE

Selecionar tudo


 begin 
    select count(*) v_contador from tabela_A; 
    if nvl(v_contador,0) > 0 then 
       l_msg('Aguarde por favor, enquanto outro usuário realiza a impressão.'); 
       raise form_trigger_failure; 
    end if; 
  
 exception 
       when l_msd(sqlerrm); 
       raise form_trigger_failure; 
 end; 
Hahu,
Existe uma explicação muito lógica para o "Non-Oracle Exception", porém o seu código está meio estranho.
Da forma em que está, ele NUNCA será executado, pois há erros de sintaxe e lógica, que quem tentar executar logo perceberá. Então vamos ao que interessa:
A mensgame é clara: "100501: non-Oracle exception"
Onde "100501" é o SQLCODE e "100501: non-Oracle exception" é o SQLERRM. O nome já diz tudo. Não é uma exceção do Oracle. Já é uma pista.
Para esta mensagem ser exibida, seria necessário um tratamento de erros com EXCEPTION, com WHEN OTHERS, onde o SQLERRM fosse exibido. Seu código não tem isto, então só se pode presumir que o código que está dando o erro não é este.
Supondo a condição que realmente um erro desse poderia ocorrer, do que se trata???
Da própria exceção FORM_TRIGGER_FAILURE, que não é uma exceção do Oracle, mas sim uma exceção da ferramente Forms Developer.
Para evitar situações deste tipo, sempre que se queira tratar exceções com WHEN OTHERS dentro do Oracle Forms, deve-se presumir a utilização do FORM_TRIGGER_FAILURE para evitar surpresas desagradáveis como esta.
Eu vou reescrever seu código, com o tratamento adequado (além de fazer ajustes para que ele funcione).
Salientando que para o teu caso o FORM_TRIGGER_FAILURE seria desnecessario. Colocarei o tratamento dele supondo que isto seria uma rotina chamada de outros pontos do sistema que poderiam lançar o FORM_TRIGGER_FAILURE.

Segue abaixo:

Selecionar tudo


declare
   
  e_aguardar_impressao exception;
 
begin 

    select count(*) into v_contador from tabela_A; 

    if nvl(v_contador,0) > 0 then 

       raise e_aguardar_impressao;

    end if; 
  
 exception 
   -- aqui é o principal ponto de discussão
   when form_trigger_failure then
           raise; -- levanta a exceção novamente para que a trigger do forms pare.
   when e_aguardar_impressao then
         l_msg('Aguarde por favor, enquanto outro usuário realiza a impressão.');  

   when others then
       l_msg(sqlerrm);  
 end;    
Responder
  • Informação