Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

PauloTI

[Resolvido] Oracle/TRIGGER

Recommended Posts

Pessoal, Bom dia.

 

Estou com uma duvida com TRIGGER.. é o seguinte..

Imagine que você tem um valor em um campo.. e quando ele for alterado (UPDATING) outra tabela com a mesma informação também deve ser alterada automaticamente.

 

EXEMPLO.. EU ALTERO A EMP_01

 

Coluna: " COMM "

 

 

UPDATE EMP_01
SET COMM = SAL * 0.1
WHERE EMPNO = 7369

 

( Estou colocando na comissão do funcionário 7369 - que é NULLA.. 10% do salario do mesmo )

 

Agora na TABELA EMP Deve ser alterado também este valor.

 

Segue o que consegui fazer.

---

 

 

CREATE OR REPLACE TRIGGER AUMENTA_REDUZ
AFTER UPDATE OF COMM
ON EMP_01
FOR EACH ROW

BEGIN
   IF UPDATING THEN
    UPDATE EMP
    SET COMM = :NEW.SAL 
    WHERE SAL = :NEW.COMM;

END IF;
END;

 

----

 

Alguém poderia ajudar?

 

Obrigado

 

att.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Qual a dúvida ?

 

 

É Possível eu alterar primeiramente na TABELA EMP_01 e em seguida na TABELA EMP ser alterado também com essa TRIGGER?

Compartilhar este post


Link para o post
Compartilhar em outros sites

A trigger faz o seguinte :

 

Após a alteração (update) da coluna COMM da tabela EMP_01 o update da tabela EMP será feito.

 

A trigger não altera a tabela EMP_01 ela é acionada (trigged) pela operação de update em EMP.

 

Alguém faz

 

update emp_01 set comm = 10 where sal = 1234;

 

Se algum registro for alterado (FOR EACH ROW) a trigger é acionada e faz o update

 

 UPDATE EMP
    SET COMM = :NEW.SAL 
    WHERE SAL = :NEW.COMM;

 

:new.<coluna> tem o valor novo (alterado) da operação

 

O mais correto talvez seja alterar pela chave primária de EMP.

Compartilhar este post


Link para o post
Compartilhar em outros sites

A trigger faz o seguinte :

 

Após a alteração (update) da coluna COMM da tabela EMP_01 o update da tabela EMP será feito.

 

A trigger não altera a tabela EMP_01 ela é acionada (trigged) pela operação de update em EMP.

 

Alguém faz

 

update emp_01 set comm = 10 where sal = 1234;

 

Se algum registro for alterado (FOR EACH ROW) a trigger é acionada e faz o update

 

 UPDATE EMP
    SET COMM = :NEW.SAL 
    WHERE SAL = :NEW.COMM;

 

:new.<coluna> tem o valor novo (alterado) da operação

 

O mais correto talvez seja alterar pela chave primária de EMP.

 

 

 

 

Sim OK eu entendi..

 

Mas digamos que seja esse o UPATE

 

UPDATE EMP_01

SET COMM = SAL * 0.1

WHERE EMPNO = 7369

 

Quando faço isso o valor não é alterado na tabela " EMP " na verdade ele é sim.. mas alterado errado!

 

Por que?

 

A PRIMARIA DE AMBAS AS TABELAS É A "EMPNO"

Compartilhar este post


Link para o post
Compartilhar em outros sites

UPDATE EMP_01
SET COMM = SAL * 0.1
WHERE EMPNO = 7369

 

Sua trigger deveria ser

 

CREATE OR REPLACE TRIGGER AUMENTA_REDUZ
AFTER UPDATE OF COMM
ON EMP_01
FOR EACH ROW

BEGIN
   IF UPDATING THEN
    UPDATE EMP
    SET COMM = :NEW.COMM 
    WHERE EMPNO = :NEW.EMPNO ;  

END IF;
END;

Compartilhar este post


Link para o post
Compartilhar em outros sites

UPDATE EMP_01
SET COMM = SAL * 0.1
WHERE EMPNO = 7369

 

Sua trigger deveria ser

 

CREATE OR REPLACE TRIGGER AUMENTA_REDUZ
AFTER UPDATE OF COMM
ON EMP_01
FOR EACH ROW

BEGIN
   IF UPDATING THEN
    UPDATE EMP
    SET COMM = :NEW.COMM 
    WHERE EMPNO = :NEW.EMPNO ;  

END IF;
END;

 

 

Perfeito!

 

Muito Obrigado motta..

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.