› Fóruns › SQL e PL/SQL › [Dúvida] trigger after insert
- Este tópico contém 5 respostas, 3 vozes e foi atualizado pela última vez 13 anos, 8 meses atrás por
Fábio Prado.
-
AutorPosts
-
21 de setembro de 2012 às 3:02 pm #104451
Leonardo de Oliveira Souza
ParticipanteOla galera, comecei a ver oracle esse semestre na faculdade, e não estou conseguindo fazer essa trigger rodar
a função dela é a seguinte: tem uma tabela de compra que tem os campos: valor, desconto e total
a trigger deve pegar o valor de (valor – desconto) e jogar no total, eu fiz do seguinte jeito
CREATE OR REPLACE TRIGGER TG_COMPRA_AI
AFTER INSERT ON COMPRA
FOR EACH ROW
BEGIN
UPDATE COMPRA
SET
CPR_TOTAL = CPR_VALOR – CPR_DESCONTO
WHERE CPR_CODIGO = :OLD.CPR_CODIGO;
END;com esse código, na hora de inserir algum registro da um erro
alguem sabe o que está errado na trigger?
21 de setembro de 2012 às 5:48 pm #104453rman
Participante@losam
Neste caso é interessante disparar a trigger antes de inserir:
CREATE OR REPLACE TRIGGER TG_COMPRA_AI
BEFORE INSERT ON COMPRA
FOR EACH ROW
BEGIN
:NEW.CPR_TOTAL := :NEW.CPR_VALOR - :NEW.CPR_DESCONTO;
END;
21 de setembro de 2012 às 5:54 pm #104455Fábio Prado
Participantelosam,
Com trigger AFTER… vc naõ consegue alterar dados na mesma tabela.
Ao invés de criar uma trigger, para vc ver o valor total, no 11G sugiro que a coluna CPR_TOTAL seja uma coluna virtual. Leia https://profissionaloracle.com.br/blogs/ … -virtuais/ para ver como fazer isso!
[]s
Fábio Prado
http://www.fabioprado.net21 de setembro de 2012 às 6:21 pm #104457Leonardo de Oliveira Souza
Participanterman, obrigado cara, fiz aqui e funcionou
fbifabio, entendi, vou dar uma olhada no material, obrigado
21 de setembro de 2012 às 7:42 pm #104459Leonardo de Oliveira Souza
Participante[quote=”fbifabio”:25ttcbts]losam,
Com trigger AFTER… vc naõ consegue alterar dados na mesma tabela.
Ao invés de criar uma trigger, para vc ver o valor total, no 11G sugiro que a coluna CPR_TOTAL seja uma coluna virtual. Leia https://profissionaloracle.com.br/blogs/ … -virtuais/ para ver como fazer isso!
[]s
Fábio Prado
http://www.fabioprado.net[/quote%5Dtentei fazer aqui com coluna virtual assim como disse, e funcionou, e achei mais prático e fácil do que usar trigger
valeu pela dica
21 de setembro de 2012 às 11:11 pm #104461Fábio Prado
Participantelosam,
Q bom que funcionou. Eu achei fantástico o Oracle implementar colunas virtuais no 11G. Quando eu era programador Dot Net há mais de 7 atrás, eu já criava colunas virtuais na aplicação, agora ficou muito bom poder fazer isso tbém no BD.
Sempre que possível, evite usar triggers. Muitas vezes existem soluções melhores (como essa)!
[]s
Fábio Prado
http://www.fabioprado.net -
AutorPosts
- Você deve fazer login para responder a este tópico.
› Fóruns › SQL e PL/SQL › [Dúvida] trigger after insert