Boa tarde pessoal
fiz uma trigger After Insert em uma tabela, e gostaria de testar uma condiçao e enviar uma mensagem ao usuario se esta condiçao for verdadeira. Eu fiz assim:
If Vn_Realizado > Vn_Orcado Then
RAISE_APPLICATION_ERROR (-20500,'O Valor Realizado é Superior ao Orçado! ');
End if;
Mas quando a condiçao é veiradeira, o texto que defini na mensagem não aparece.
alguém tem alguma sugestão.
Obs: Usamos o EBS da oracle e a mensagem teria que aparecer no Forms Core do EBS no momento que o usuario está inserindo um novo registro.
É que eu preciso testar se o valor que o usuario está inserindo ultrapassa o valor que está orçado para aquela despesa. Se for, eu tenho que mostrar e mensagem de erro e não deixar gravar.
Eu entendi, mas se não está mostrando a mensagem, eu pensei em duas possibilidades:
1. A condição não é verdadeira, por isso não está aparecendo;
2. Não está passando por essa trigger por algum motivo.
Por isso falei para você comentar o if, para ver se mostra a mensagem, se aparecer, quer dizer que a trigger está sendo executada, mas por algum motivo os valores das variáveis não estão sendo preenchidas.
Se mesmo sem o if não mostrar a mensagem, pode ser alguma verificação ou validação anterior a essa (Se existir) que não está deixando chegar a esse if, ou a trigger não está sendo executada.
Olá,
Sim, eu testei. Ele está entrando no if. O que ocorre é que o texto que eu defino na mensagem não aparece. Mostra um outro erro. Acredito que seja porque nós utilizamos o EBS da Oracle e as exceções devem ser tratadas de uma forma diferente.
Se alguém tiver experiencia ai com uso do mensagens via trigger dentro do EBS eu agradeço a ajuda.
vou continuar pesquisando.....
Boas, se pretendes que não deixe gravar se o Vn_Realizado > Vn_Orcado , então o teu trigger devia ser um before insert, para que a verificação seja feita antes de inserir.
If Vn_Realizado > Vn_Orcado Then
Fnd_Message.SET_NAME('FND','FND_GENERIC_MESSAGE');
Fnd_Message.SET_TOKEN('MESSAGE', 'Valor Realizado é Maior que o Orçado. Procure o Patrocinador da Conta. ' || sqlerrm);
Fnd_Message.RAISE_ERROR;
End if;
Eles utilizaram o FND porque estão usando o "ORACLE EBS" (um ERP da ORACLE) e neste caso, o EBS precisa usar este método para que o usuário veja isso na tela do sistema. Se não for o seu caso, recomendo o uso do RAISE_APPLICATION_ERROR.