Dúvida 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
Marcio Tavares
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 19
Registrado em: Seg, 22 Out 2007 3:24 pm
Localização: SP
Grato.

Marcio Tavares

Olá Personas!

Gostaria de tirar uma dúvida com você´s.

Estou desenvolvendo uma trigger e tenho uma dúvida.

Dentro da cláusula de condição para executar a trigger faço a seguinte verificação.

IF (:OLD.CAMPO1 <> :NEW.CAMPO1) THEN
:
:
END IF;

Porem numca executa está condição.
alguém poderia me dizer o que estou faxendo de errado?

[]´s :shock:
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,

Este IF relaciona-se à uma trigger de INSERT, UPDATE ou DELETE?
After ou Before?
Marcio Tavares
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 19
Registrado em: Seg, 22 Out 2007 3:24 pm
Localização: SP
Grato.

Marcio Tavares

Se relaciona a um UPDATE, e quanto ao After ou Before, tentei utilizar os dosi mas ainda assim nada!

[]´s
Tineks
Rank: DBA Sênior
Rank: DBA Sênior
Mensagens: 365
Registrado em: Ter, 24 Mai 2005 2:24 pm
Localização: Araraquara - SP
Cristiano (Tineks)
Araraquara - SP

E ai Marcio, beleza?

provavelmente ele não entra no IF porque alguns dos campos deve ser nulo, no caso de uma inclusao isso pode acontecer pois o OLD não existe.
utilize nvl no if, exemplo.

Selecionar tudo

   IF (nvl(:OLD.CAMPO1,'*') <> nvl(:NEW.CAMPO1,'*')) THEN 
      : 
      :
   END IF; 
[]'s
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

Pessoal,

Para ajudar, resolvi colocar aqui uma documentação legal que encontrei na net sobre triggers.

Fica ai a dica.
rodfbar
Rank: DBA Pleno
Rank: DBA Pleno
Mensagens: 241
Registrado em: Ter, 09 Out 2007 11:15 am
Localização: Batatais - SP

boa tarde...

você tentou verificar se sua trigger tem o comando "for each row" para executar linha a linha... alguma coisa assim???

c der explica +- o que você quer fazer...

você por utilizar se a trigger só estiver fazendo o que esta dentro desta verificacao utilizar o comando "when" para a trigger só disparar quando for verdadeiro

delcare trigger
for each row
when nvl(new.campo,'*') <> nvl(old.campo,'*') /*usa o '*' no caso do char se for number usa 0*/
begin
.
.
end trigger;
Marcio Tavares
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 19
Registrado em: Seg, 22 Out 2007 3:24 pm
Localização: SP
Grato.

Marcio Tavares

Valeu galera!

Obrigado a todos!

[]´s
rob.rodrigues
Rank: Estagiário Pleno
Rank: Estagiário Pleno
Mensagens: 3
Registrado em: Ter, 09 Out 2007 7:50 am
Localização: São Paulo - SP

Inicialmente peço desculpas ao Marcio Tavares por utilizar seu tópico, porém achei correto usá-lo visto que trata-se de uma dúvida sobre triggers.

Estou no inicio do aprendizado de triggers, e preciso desenvolver uma seqüencia de triggers para as regra de negócio de um site.

Minha dúvida é a seguinte:

Me encaminharam a seguinte regra de negócio.

RN5 - Cada pedido poderá no máximo conter 06 porções;

Para isso desenvolvi a seguinte Trigger:

Selecionar tudo

CREATE OR REPLACE
TRIGGER RN5 BEFORE INSERT OR UPDATE ON CARDAPIOPEDIDO 
FOR EACH ROW 
BEGIN
  IF:NEW.QUANTIDADE > 6 THEN
    
    RAISE_APPLICATION_ERROR( -20101, 'Os pedidos devem possuir no máximo 6 porções' );
    
  END IF;
END;

Compilou e funcionou perfeitamente, contudo após o código pronto foi acrescentado a seguinte sub-regra ao meu trabalho (em cima da hora)

RN5.1 - Para pedidos superiores, deverá ser contratado com 1 semana de antecedência

Seguindo meu requisito e os códigos já implementados (collections e etc...)
Fiz a seguinte analise do que deveria ser feito com o novo código (trigger)

"Após a ativação da Trigger anterior, deveria ser efetuado uma nova operação para que o usuário recebe-se uma mensagem (ex. Para pedidos superiores a 6 porções o prazo de entrega é de 1 semana), onde o cliente confirmaria ou não. Caso Confirmado o sistema deveria liberar o preenchimento dos dados, chamando logo em seguida uma função que mostraria automaticamente a data de entrega somando 1 semana (invalidando assim a Collection de tempo de entrega)".

Como efetuar esta nova Trigger? Como chamar uma mensagem de confirmação para o usuário? Terei que chamar uma classe JAVA como me falaram?

Agradeço a atenção dispensada
Tineks
Rank: DBA Sênior
Rank: DBA Sênior
Mensagens: 365
Registrado em: Ter, 24 Mai 2005 2:24 pm
Localização: Araraquara - SP
Cristiano (Tineks)
Araraquara - SP

E ai beleza?

então cara, dentro de uma trigger não tem como você colocar essa mensagem pedindo a confirmação, isso teria q ser feito dentro da aplicação. você está desenvolvendo em qual linguagem?

[]s
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,

Quanto à chamar classes java, dê uma olhada neste link:

http://www.orafaq.com/forum/t/76150/2/

Também achei um conteúdo num fórum:

Selecionar tudo

> Hi All, 
> 
> Does Oracle supports calling Java Classes? I would like to 
> call a Java Class file from the Oracle Database Trigger 
> PL/SQL Program. Could You please help me out in providing a 
> solution. 


This can be done in Oracle8i. 
You load the java into the database, then you create a PL/SQL function/procedure that maps a static method of your java class. 
This function/procedure can be called from a trigger. Check the samples in $ORACLE_HOME/javavm/demo 

> 
> Thanks in Advance 
> Avinash 
Responder
  • Informação
  • Quem está online

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