PauloTI 0 Denunciar post Postado Outubro 26, 2012 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
Motta 645 Denunciar post Postado Outubro 26, 2012 Qual a dúvida ? Compartilhar este post Link para o post Compartilhar em outros sites
PauloTI 0 Denunciar post Postado Outubro 26, 2012 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
Motta 645 Denunciar post Postado Outubro 26, 2012 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
PauloTI 0 Denunciar post Postado Outubro 26, 2012 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
Motta 645 Denunciar post Postado Outubro 26, 2012 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
PauloTI 0 Denunciar post Postado Outubro 26, 2012 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