Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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.
>
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?
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.
>
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"
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;>
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..
Qual a dúvida ?