Mensagem customizada em uma Trigger

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
marlonpasquali
Rank: DBA Pleno
Rank: DBA Pleno
Mensagens: 248
Registrado em: Sex, 06 Fev 2009 3:02 pm
Localização: ERECHIM - RS

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:

Selecionar tudo

       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.
Avatar do usuário
tiago_pimenta
Rank: DBA Júnior
Rank: DBA Júnior
Mensagens: 213
Registrado em: Qua, 29 Jun 2011 9:49 am
Localização: Barretos / SP

Você já tentou só o RAISE_APPLICATION_ERROR (-20500,'O Valor Realizado é Superior ao Orçado! '); sem o if ???
marlonpasquali
Rank: DBA Pleno
Rank: DBA Pleno
Mensagens: 248
Registrado em: Sex, 06 Fev 2009 3:02 pm
Localização: ERECHIM - RS

É 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.
Avatar do usuário
tiago_pimenta
Rank: DBA Júnior
Rank: DBA Júnior
Mensagens: 213
Registrado em: Qua, 29 Jun 2011 9:49 am
Localização: Barretos / SP

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.

[ ]s
marlonpasquali
Rank: DBA Pleno
Rank: DBA Pleno
Mensagens: 248
Registrado em: Sex, 06 Fev 2009 3:02 pm
Localização: ERECHIM - RS

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.....

obrigado
Marlon
paisneto
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 16
Registrado em: Qua, 05 Fev 2014 6:48 am
Localização: Portugal

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.
marlonpasquali
Rank: DBA Pleno
Rank: DBA Pleno
Mensagens: 248
Registrado em: Sex, 06 Fev 2009 3:02 pm
Localização: ERECHIM - RS

Olá,
o problema foi resolvido usando o seguinte:

Selecionar tudo

        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;
obrigado a todos.
att
Marlon
thiagolimadsilva
Rank: Estagiário Júnior
Rank: Estagiário Júnior
Mensagens: 2
Registrado em: Dom, 24 Mai 2015 11:36 pm

Boa tarde!

Estou com uma dúvida. Estou desenvolvendo uma trigger com o mesmo objetivo, mas a trigger não reconhece:

Selecionar tudo

Fnd_Message.SET_NAME
Fnd_Message.SET_TOKEN
Erro:

Selecionar tudo

Compilation errors for TRIGGER TRG_CONFIRMACAO_CC
#13#10Error: PLS-00201: identifier 'FND_MESSAGE.SET_NAME' must be declared

Pergunta é tem algum pacote ou algo que devo configurar antes ?

Att,
Avatar do usuário
stcoutinho
Moderador
Moderador
Mensagens: 850
Registrado em: Qua, 11 Mai 2011 5:15 pm
Localização: são Paulo - SP

Oi thiagolimadsilva,

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.

At.

Sergio Coutinho
thiagolimadsilva
Rank: Estagiário Júnior
Rank: Estagiário Júnior
Mensagens: 2
Registrado em: Dom, 24 Mai 2015 11:36 pm

Obrigado Sergio Coutinho!
Responder
  • Informação
  • Quem está online

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