Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
olá pessoal.
sou novo no forum e também no assunto trigger para o mysql e precisei usar este recurso, mas não estou conseguindo chegar ao resultado que gostaria, por isso venho aqui pedir ajuda de vocês.
seguinte:
tenho uma tabela 'lancamentos' com o campos [iD;HISTORICO;TIPO;VALOR;SALDO] [Tipo = Debito (D) ou Credito ©] e tenho criar uma trigger pra ser disparada no BEFORE INSERT para calcular o saldo e inserir no campo SALDO. vejam exemplo abaixo que já encontrei em outro post aqui.
CREATE TRIGGER SaldoAtual BEFORE INSERT ON lancamentos
FOR EACH ROW BEGIN
DECLARE saldoAnterior DECIMAL(10,2);
SET saldoAnterior = (SELECT L.SALDO FROM lancamentos L ORDER BY L.ID DESC LIMIT 1);
IF saldoAnterior <> '' THEN
IF (NEW.TIPO = 'C') THEN
SET NEW.SALDO = saldoAnterior + NEW.VALOR;
ELSE
SET NEW.SALDO = saldoAnterior - NEW.VALOR;
END IF;
ELSE
SET NEW.SALDO = NEW.VALOR;
END IF;
END
esse exemplo funciona bem para o insert, mas existe outra dificuldade e não tenho conseguido resolver.
Preciso ter outra trigger no BEFORE UPDATE da mesma tabela que se eu alterar um valor anterior por exemplo esta trigger atualize o saldo da linha alterada e de todas as outras linhas que existirem depois dela para que o saldo fique correto.
espero ter me feito compreender e se alguém puder me ajudar com algum exemplo eu ficarei muito grato.
Bom, ninguém ajudou aqui, mas encontrei uma solução diferente em outro fórum e acho que conhecimento é pra ser compartilhado, então vou postar pra ajudar alguém no futuro a solução simples e que resolveu perfeitamente.Eu coloquei a query abaixo em uma view e o resultado ficou exatamente como eu queria.
SELECT DATE_FORMAT(data,'%d/%m/%Y') AS data,
SUM(IF(tipo = 'C', valor, 0)) AS credito,
SUM(IF(tipo = 'D', valor, 0)) AS debito,
(SELECT SUM(IF(tipo = 'C', valor, -valor)) FROM lancamentos AS L2
WHERE DATE_FORMAT(lancamentos.data,'%Y%m%d') >= DATE_FORMAT(L2.data,'%Y%m%d')
) AS saldo
FROM lancamentos
GROUP BY DAY(data), MONTH(data), YEAR(data)Bom dia Geraldo
estou com o mesmo problema
como aplicou esse view
obrigado
nem uma ajudinha pessoal?