Fórum estoque mysql #520458
21/05/2015
0
DELIMITER //
CREATE
DEFINER = 'root'@'localhost'
TRIGGER teste.tr_ddddd
AFTER insert
ON teste.item
FOR EACH ROW
BEGIN
update prod set prod.estoque = prod.estoque - new.qtd
where prod.prodid = new.idprod;
end //
DELIMITER;
queria saber como faço uma verificação se a new.qtd vendida é maior que a do prod.estoque, se fosse dar uma mensagem. alguem pode me ajudar?
Nei
Curtir tópico
+ 0Post mais votado
21/05/2015
Aliás, esse foi exatamente o erro que você obteve : not allowed to return a result set from trigger
Trigger não se aplica a esse tipo básico de comando ( um update, no seu caso ).
Triggeres são estruturas orientadas a funções mais específicas, como geração de logs ou atualizações em cascata em múltiplas tabelas.
Na verdade, triggeres são complicadas de administrar e depurar no ambiente, pois sua principal característica é ser invisível quando você executa uma operação qualquer na tabela. Muitas vezes nem lembramos que elas existem !
Construa a procedure com a mesma lógica da trigger e execute-a direto, através do comando "Call", no console do MySql ou na sua aplicação.
Dê uma olhada na documentação do MySql :
Criando uma Stored Procedure
Executando uma Stored Procedure
Marcos P
Gostei + 1
Mais Posts
21/05/2015
Marcos P
Inclusive, muitos gerenciadores de banco retornam erro quando você tenta gerar qualquer tipo de "output" dentro de uma trigger.
Se isso fosse uma procedure, o que você poderia fazer é usar o comando [url:descricao=IF (MySql)]https://dev.mysql.com/doc/refman/5.0/en/if.html[/url], implementando um tratamento condicional no seu código.
Algo como :
: IF EXISTS (select * from prod where prod.estoque <= new.qtd and prod.prodid = new.idprod ) THEN update prod set prod.estoque = prod.estoque - new.qtd where prod.prodid = new.idprod; ELSE select 'Nova quantidade, menor que o estoque !' as Mensagem; END IF;
Dê uma estudada nesses comandos e evolua sua lógica a partir dessa ideia.
Gostei + 0
21/05/2015
Nei
Gostei + 0
21/05/2015
Marcos P
Porque você não transforma essa trigger em uma procedure ou function ?
Gostei + 0
21/05/2015
Nei
Gostei + 0
28/05/2015
Marisiana Battistella
Quando se utiliza procedures e functions é mais fácil de controlar o que será executado em cada momento e, também, a performance de cada código executado.
Gostei + 0
29/05/2015
Nei
Gostei + 0
29/05/2015
Marcos P
Gostei + 0
29/05/2015
Nei
Gostei + 0
29/05/2015
Marisiana Battistella
Você irá chamar da mesma forma que você executa um SQL para retornar os dados...
Gostei + 0
29/05/2015
Marcos P
https://www.devmedia.com.br/stored-procedures-e-iappserver-curso-de-multicamadas-com-delphi-e-datasnap-72/31231
http://stackoverflow.com/questions/29004499/using-firedac-to-run-sql-stored-procedure
http://docwiki.embarcadero.com/RADStudio/XE6/en/Executing_Stored_Procedures_%28FireDAC%29
Gostei + 1
30/05/2015
Marisiana Battistella
Gostei + 0
31/05/2015
Maycon
quantas tabelas você tem ?
você tem que ter 4 tabelas ok?
Estoque, Produtos, Entrada e Saida de Produtos certo
Você terá que ter 6 Trigger e uma Procedure
Upei no site o código que eu uso da uma olhada da pra fazer o controle de estoque completo e simples :D
Motivo de upar lá é porque aqui o forum é sensivel a caracteres _
http://www.4shared.com/file/EGyEw4vXba/CONTROLE_DE_ESTOQUE_COM_TRIGGE.html?
Gostei + 0
31/05/2015
Maycon
Gostei + 0
31/05/2015
Nei
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)