Seque um exemplo de um trigger que atualiza o saldo do local de estoque quando um produto eh movimentado.
USE iwerp_cinco
;
DELIMITER $$
CREATE TRIGGER estoqmov_bef_ins
BEFORE INSERT ON estoqmov
FOR EACH ROW
– Edit trigger body code below this line. Do not edit lines above this one
BEGIN
DECLARE varProdutoId integer;
DECLARE varLocalId integer;
DECLARE varEstoquesId integer;
DECLARE varSaldo decimal(14,4);
DECLARE varQuantidade decimal(14,4);
DECLARE varCodigoTrans varchar(15);
DECLARE varEntradaSaida char(1);
SELECT Parametros INTO varEntradaSaida FROM geraltab WHERE Grupo=‘ESTOQUETRANSAC’ AND Codigo=NEW.GTEstoqTransCod;
IF (NEW.Estorno)
THEN
SELECT codigo INTO varCodigoTrans FROM geraltab WHERE grupo=‘ESTOQUETRANSAC’ AND Parametros=CONCAT(‘ESTORNO:’,NEW.GTEstoqTransCod);
Set NEW.GTEstoqTransCod=varCodigoTrans;
IF varEntradaSaida = ‘E’ THEN SET varEntradaSaida =‘S’; ELSE SET varEntradaSaida=‘E’; END IF;
END IF;
Set NEW.Transacao=varEntradaSaida;
set varQuantidade=(CASE WHEN new.Transacao = ‘E’ THEN new.Quantidade ELSE new.Quantidade*-1 END);
Set varProdutoId=(select Id from produtos where Codigo = new.ProdutoCodigo);
Set varLocalId=(SELECT Id FROM geraltab WHERE grupo = ‘EstoqueLocal’ and Codigo = new.GTLocalCodigo);
SELECT ID, Saldo+varQuantidade
INTO varEstoquesId, varSaldo
FROM estoques
WHERE GTEstoqueLocalId = varLocalId and ProdutoId = varProdutoId;
IF (varEstoquesId > 0)
THEN UPDATE estoques SET Saldo = varSaldo WHERE id = varEstoquesId;
ELSE INSERT INTO estoques (GTEstoqueLocalId,ProdutoId,Saldo)
VALUE (varLocalId,varProdutoId,varQuantidade);
END IF;
SET NEW.Saldo = (CASE WHEN varSaldo IS NULL THEN varQuantidade ELSE varSaldo END);
SET NEW.DTUpdate= Now();
END