GARANTIR DESCONTO

Fórum Trigger para controlar estoque #401075

15/05/2011

0

Colegas, estou iniciando o oracle, fiz um trigger que apresentou o erro abaixo:Podem me ajudar por favor.
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

Nilo Souza

Responder

Posts

17/05/2011

Anthony Accioly

Sugestão 1: Está faltando o
FOR EACH ROW
Sugestão 2: Acho que você quer que o disparo seja feito em
AFTER INSERT OR UPDATE OR DELETE 

Veja exemplos em  http://psoug.org/reference/table_trigger.html
Responder

Gostei + 0

17/05/2011

Nilo Souza

Isso mesmo. Obrigado
Responder

Gostei + 0

17/05/2011

Anthony Accioly

Fico feliz em ajudar. Você poderia, por favor, atualizar o status do chamado para resolvido?
Abraços.
Responder

Gostei + 0

04/05/2012

Alex Willian

esse código é o correto!!!

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;
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar