Tratamento de um erro ORA

Dicas do Oracle Forms Builder - Blocos, Itens, LOV, Canvas, Triggers, comandos, PLL, d2kwutil, FMB, Alert, menus, etc
Responder
Gibson
Rank: Estagiário Sênior
Rank: Estagiário Sênior
Mensagens: 9
Registrado em: Ter, 11 Nov 2008 6:44 pm
Localização: São Paulo

Pessoal,

É possível identificar um erro ORA-NNNNN e exibir alguma mensagem a partir da identificação desse erro???

Vou tentar explicar: tenho um modelo que não permite apagar alguns dados pelo forms por causa de chaves estrangeiras
e eu quero exibir esse erro ao usuário. Porém o erro que o forms retorna é um FRM-40201 (acho que é esse)
que é um erro na exclusão dos dados, mas que não identifica que é por causa da chave estrangeira.
Detalhe: a tabela referenciada não está no módulo.

Tem remédio?
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

Gibson, beleza cara?

Dá uma olhada neste link e, veja se lhe ajuda:

http://www.glufke.net/oracle/viewtopic. ... ht=onerror

Você pode ter mais informações aqui no fórum mesmo, procurando por ON_MESSAGE e ON_ERROR.

Qualquer coisa, manda pra gente.
Gibson
Rank: Estagiário Sênior
Rank: Estagiário Sênior
Mensagens: 9
Registrado em: Ter, 11 Nov 2008 6:44 pm
Localização: São Paulo

O forms retorna o erro FRM-40501, mas ele não é tão detalhado quanto ao
erro ORA. Solucionei o caso de forma alternativa, criei um cursor com as tabelas e
criei uma mensagem de erro caso fosse encontado algum relacionamento. acredito
que assim o processamento é maior, porem resolve. para diminuir o impacto usei
a hint FIRST ROWS.

A necessidade de identificar o erro e mostrar a mensagem é mais coisa pra usuario final mesmo.
mas ainda vale como aprendizado.

valeu pela ajuda, Trevissoli!!!

Se alguém ainda tiver solucao, estou no aguardo!!!
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,

Eu havia feito da forma que lhe passei e, deu certo sim.
O que você deve atentar, é o seguinte:

Às vezes, a mensagem não é de ERRO, então, você deve, obrigatoriamente, utilizar o ON-MESSAGE ao invés da ON-ERROR.

Mas, neste caso, tente adaptá-la (40501) ao exemplo que vem no HELP do Forms:

Selecionar tudo

** Built-in:  ERROR_CODE,ERROR_TEXT,ERROR_TYPE 
** Example:   Reword certain FRM error messages by checking 
**            the Error_Code in an ON-ERROR trigger 
** Trigger:   On-Error 
*/ 
DECLARE 
  errnum NUMBER       := ERROR_CODE; 
  errtxt VARCHAR2(80) := ERROR_TEXT; 
  errtyp VARCHAR2(3)  := ERROR_TYPE; 
BEGIN 
  IF errnum = 40301 THEN 
    Message('Your search criteria identified no matches...
              Try Again.'); 
  ELSIF errnum = 40350 THEN 
    Message('Your selection does not correspond to an employee.'); 
  ELSE 
    /* 
    ** Print the Normal Message that would have appeared 
    ** 
    ** Default Error Message Text Goes Here 
    */ 
    Message(errtyp||'-'||TO_CHAR(errnum)||': '||errtxt); 
    RAISE Form_Trigger_Failure; 
  END IF; 
END; 
Sinceramente, acho muito mais interessante do que criar uma tabela para tal.

Fica ai a dica, qualquer coisa, conta com a gente.
Responder
  • Informação
  • Quem está online

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