Trigger interagindo com FORMS

Dúvidas, dicas e truques de PL/SQL. Aqui também vão assuntos relacionados a pacotes, triggers, funções, Java-Stored Procedures, etc
Responder
BCR
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 25
Registrado em: Qui, 22 Nov 2012 1:40 pm
Localização: Patos de Minas
Breno Cristovão Rocha.

bom dia,
Pessoal... Antes de criar este tópico procurei sobre o assunto que estou com dificuldade e não consegui resolver o que preciso... Portanto caso seja necessário apagar ou realocar este tópico fiquem à vontade...

Informações técnicas...
Estou usando o Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
PL/SQL Release 11.2.0.1.0 - Production

e estou utilizando o Forms [32 Bits] Versão 6.0.8.13.0

O meu problema é o seguinte...

Eu tenho uma trigger no banco de dados, e através de uma validação eu coloquei o seguinte código:


RAISE_APPLICATION_ERROR(-20001,' TESTE DE RAISE_APLLICATION ');


Eu até consigo bloquear com este comando.... E bloquear no FORMS

Mas gostaria de retornar uma mensagem para o usuário final.... Dizendo o motivo pelo qual
houve uma mensagem de erro..

No Forms, logo abaixo... me apresenta a seguinte mensagem:

----------------------------------------------------------------
FRM-40508: Erro do ORACLE: não é possível INSERIR registo.
----------------------------------------------------------------

Eu gostaria de poder tratar esta mensagem... é onde gostaria de uma ajuda
pois não consegui fazer o RAISE_APPLICATION_ERROR interagir com FORMS e levar uma mensagem que eu gostaria de manipular para o usuário.... de forma explicativa....


Se alguém souber como realizar este procedimento... ficarei muito grato ! :-o
Obrigado.
tora34
Rank: Analista Pleno
Rank: Analista Pleno
Mensagens: 108
Registrado em: Qua, 12 Nov 2008 6:01 pm
Localização: Campo Mourão PR
Renato Pasquini
Oracle Developer

boa tarde,
Você pode utilizar a built DBMS_ERROR_TEXT dentro da trigger ON-ERROR a nível de forms, esta função retorna a primeira exception encontrada pelo forms, neste caso a mensagem informada na procedure raise_application_error dentro da trigger da sua tabela.
BCR
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 25
Registrado em: Qui, 22 Nov 2012 1:40 pm
Localização: Patos de Minas
Breno Cristovão Rocha.

Bom dia !

Bom, gostaria de agradecer ao colega que com seu post me mostrou o caminho para resolver o problema que eu estava enfrentando.

Vou passo a posso explicar como consegui resolver seguindo o que o tora34 sugeriu...

Como eu havia comentado, eu tinha um RAISE_APPLICATION_ERROR e queria que ele retornasse em forma de mensagem o erro para o usuário final...
Seguindo a ajuda que recebi, eu fui no FORMS em questão que gostaria que fizesse este tratamento, e a nível do FORMS e não do bloco de dados criei o gatilho "ON-ERROR"

Após criar o gatilho ON-ERROR coloquei o seguinte código:

Selecionar tudo

declare
            cod number := error_code;
            texto varchar2(4000) := error_text;
            tipo varchar2(4000) := error_type;
            dbcod number := dbms_error_code;
            dbtexto varchar2(4000) := dbms_error_text;
begin

    if dbcod = -20099 then 
            message(dbcod || ' ' || substr(dbtexto,1,62));
            message ( ' ' ) ;
            
    else 
        
      message(cod || '*' || tipo || '*' || texto) ;
      message(dbcod || '#' || dbtexto);
      
      raise form_trigger_failure; 
    end if;
end;
Onde o código do Erro -20099 eu escolhi para controle interno dentro dos números de erros reservados para a regra de negócio ORA(-20000 A -20999)

Na trigger onde tem o RAISE ficou da seguinte forma:

RAISE_APPLICATION_ERROR(-20099,'COLOQUE AQUI A MENSAGEM QUE VOCÊ QUER RETORNAR PARA O USUÁRIO FINAL !!! ');

obs: o else do bloco de código que postei acima, faz com que se acontecer algum outro tipo de erro.... ele não seja alterado... vai aparecer em forma de mensagem também... mas você irá conseguir tratar o erro a partir da mensagem original de erro do Forms !

Funcionou muito bem... espero que a solução ficou de forma clara para que muitos consigam usar este recurso que é de muita importância para tratamento de erros e retorno para os usuários das aplicações desenvolvidas em Oracle Forms !
Obrigado e valeu !!! :-o
Responder
  • Informação
  • Quem está online

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