Fórum Trigger para controlar estoque #401075
15/05/2011
0
create or replace TRIGGER TRG_ESTOQUE_ENTRADA AFTER INSERT ON NF_ENTRADA BEGIN
-- Se estiver inserindo IF INSERTING THEN UPDATE PRODUTO SET QTDE_ESTOQUE = (QTDE_ESTOQUE + :NEW.QTDE_ENTRADA) WHERE ID_PRODUTO = :NEW.ID_PRODUTO; -- Se estiver atualizando ELSIF UPDATING THEN UPDATE PRODUTO SET QTDE_ESTOQUE = ((QTDE_ESTOQUE - :OLD.QTDE_ENTRADA) + :NEW.QTDE_ENTRADA) WHERE ID_PRODUTO = :NEW.ID_PRODUTO; -- Se estiver deletando ELSIF DELETING THEN UPDATE PRODUTO SET QTDE_ESTOQUE = (QTDE_ESTOQUE - :OLD.QTDE_ENTRADA) WHERE ID_PRODUTO = :OLD.ID_PRODUTO; END IF; END;
ERRO:
Relatório de erro:ORA-04082: referências NEW ou OLD não permitidas nos gatilhos de nível de tabela04082. 00000 - "NEW or OLD references not allowed in table level triggers"*Cause: The trigger is accessing "new" or "old" values in a table trigger.*Action: Remove any new or old references.
Nilo Souza
Curtir tópico
+ 0Posts
17/05/2011
Anthony Accioly
FOR EACH ROW
AFTER INSERT OR UPDATE OR DELETE
Veja exemplos em http://psoug.org/reference/table_trigger.html
Gostei + 0
17/05/2011
Nilo Souza
Gostei + 0
17/05/2011
Anthony Accioly
Abraços.
Gostei + 0
04/05/2012
Alex Willian
CREATE OR REPLACE TRIGGER trg_prod_estoque_ajustar
AFTER INSERT OR UPDATE OR DELETE ON tb_itens
FOR EACH ROW
BEGIN
IF INSERTING THEN
UPDATE tb_produto SET estoque = estoque - :NEW.qtde
WHERE cod_prod = :NEW.cod_prod;
ELSIF UPDATING THEN
UPDATE tb_produto SET estoque = estoque + :OLD.qtde
WHERE cod_prod = :OLD.cod_prod;
UPDATE tb_produto SET estoque = estoque - :NEW.qtde
WHERE cod_prod = :NEW.cod_prod;
ELSIF DELETING THEN
UPDATE tb_produto SET estoque = estoque + :OLD.qtde
WHERE cod_prod = :OLD.cod_prod;
END IF;
END;
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)