Fórum Duvida sobre Trigger erro ao alterar dados de uma determinada tabela, #455325

15/09/2013

0

Olá senhores e senhoras, sou iniciante em mysql e em bancos de dados em geral, obvio que estou apanhando igual escravo desobediente, mas não desisto.

A duvida é o seguinte eu tenho duas tabelas (na verdade são 5 mas o foco são duas), as seguintes:

VENDA
-----------------------
IdVenda int não nulo e auto incremento [pk].
Cliente_Venda int [ esta aqui é a fk que relaciona esta tabela na tabela cliente]
Data date
Hora time
valorTotal numeric
Funcionario_venda [ fk que relaciona esta tabela com uma tabela funcionario]
==========================================================================

ITEMVENDA
-------------------
iditemvenda [PK][NN][AI]
venda_intemvenda [FK] que relaciona esta tabela a tabela venda
produto_itemvenda [FK] que relaciona esta tabela a tabela produto
QTDE float
valorunitario numeric
valordesconto numeric
valortotal numeric
===========================================================================

Até aqui beleza, eu criei uma procedure que insere o itemvenda, calculando o valor total mediante os parametros QTDE, valorunitario e desconto. Funcionando belezinha.
Criei uma TRIGGER que atualiza o campo da tabela venda valorTotal toda vez que um item é adicionado a itemvenda, conseguem entender?

EX: adicionei o produto de id 1 a venda de id 1, sendo 10 itens de 5 reais cada sem desconto, a procedure calcula o valor final e adiciona no campo valortotal[itemvenda], neste exemplo o valor adicionado seria de : 50 reias ao valortotal da tabela venda [Esta trigger que criei ta fazendo isto belezinha, altera que só o a felicidade]:

Aqui surge o problema: tenho que criar ou alterar esta trigger [não sei se uma mesma trigger pode ser disparada simultaneamente com insert, delete, update ], para que eu atualize o valor da tabela VENDA , ValorTotal, toda vez que eu adiicionar, remover ou excluir um item da tabela ITEMVENDA, Vou necessitar de outra PROCEDURE? ou da para fazer tuno na TRIGGER?

segue o código da trigger funcional e o não funcional.

CÓDIGO FUNCIONAL atualiza o valorTotal da tabela VENDA

DELIMITER //
	CREATE TRIGGER atualiza_valor_venda AFTER INSERT  ON itemvenda
	FOR EACH ROW BEGIN
		UPDATE venda SET
		valortotal=(SELECT sum(valortotal) AS valortotal FROM itemvenda where itemvenda.venda_itemvenda = venda.idvenda);
	END
//


Segue o Código para update
DELIMITER //
	CREATE TRIGGER att_valor_update AFTER UPDATE ON itemvenda
	FOR EACH ROW
		BEGIN
		declare valorT int;
		declare diferenca numeric(15,2);
	if new.qtde>old.qtde then
	SET diferença = (new.qtde - old.qtde);
	UPDATE venda SET venda.valortotal = (SELECT venda.valortotal from venda WHERE venda.idvenda = itemvenda.venda_itemvenda + (diferenca*itemvenda.valorunitario)) WHERE venda.idvenda = itemvenda.venda_itemvenda;
	else
	SET diferenca = (old.qtde - new.qtde);
UPDATE venda SET venda.valortotal = (SELECT venda.valortotal from venda WHERE venda.idvenda = itemvenda.venda_itemvenda - (diferenca*itemvenda.valorunitario)) WHERE venda.idvenda = itemvenda.venda_itemvenda ;
    end if;
					
		END
//
Marciel Miranda

Marciel Miranda

Responder

Posts

19/09/2013

William

Colega postei esse artigo aqui mesmo na devmedia, acredito ajude você:
[url]https://www.devmedia.com.br/implementando-controle-de-estoque-no-mysql-com-triggers-e-procedures/26352[/url]

Obs.: Infelizmente no MySQL ainda não podemos trabalhar com múltiplos eventos (INSERT, UPDATE E DELETE) na mesma trigger, então temos que criar uma para cada evento.

Qualquer dúvida estou a disposição...
Responder

Gostei + 0

19/09/2013

Felippe Tadeu

Colega postei esse artigo aqui mesmo na devmedia, acredito ajude você:
[url]https://www.devmedia.com.br/implementando-controle-de-estoque-no-mysql-com-triggers-e-procedures/26352[/url]

Obs.: Infelizmente no MySQL ainda não podemos trabalhar com múltiplos eventos (INSERT, UPDATE E DELETE) na mesma trigger, então temos que criar uma para cada evento.

Qualquer dúvida estou a disposição...



William, então você quer dizer que dentro de uma trigger de update, por exemplo, eu não consigo fazer um insert em outra tabela ?
Responder

Gostei + 0

19/09/2013

William

Não, o que ocorre é que você não pode manipular múltiplos eventos da mesma tabela a qual você está ligando a trigger.

Lembrando que você cria uma trigger ligada a um determinado evento de uma determinada tabela, ou seja, uma trigger para o evento INSERT tabela Vendas outra para evento UPDATE da tabela Vendas e outra para DELETE da tabela Vendas.

blz?
Responder

Gostei + 0

20/09/2013

Felippe Tadeu

Entendi, obrigado.

Tenham um bom dia
Responder

Gostei + 0

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

Aceitar