GARANTIR DESCONTO

Fórum estoque mysql #520458

21/05/2015

0

fiz essa trigger para dar baixa no estoque, segue o codigo:
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

Nei

Responder

Post mais votado

21/05/2015

Não faz sentido você chamar uma procedure de dentro de uma trigger, considerando que a procedure gera output e o MySql não suporta esse tipo de construção...

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

Marcos P
Responder

Gostei + 1

Mais Posts

21/05/2015

Marcos P

Mensagem e trigger são duas coisas que não combinam, por que o conceito de trigger é orientado a execução de comandos sem nenhum tipo de interação com o usuário / aplicação.

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

Gostei + 0

21/05/2015

Nei

bom dia marcos p, tentei criei a procedure e quando chamo ela na trigger da um erro : not allowed to return a result set from trigger
Responder

Gostei + 0

21/05/2015

Marcos P

O MySql não suporta output em trigger. Como, provavelmente, sua procedure retorna algo... problemas !

Porque você não transforma essa trigger em uma procedure ou function ?
Responder

Gostei + 0

21/05/2015

Nei

marcos desculpa sou novato, como faço uma procedure depois chamo na trigger?
Responder

Gostei + 0

28/05/2015

Marisiana Battistella

Complementando o que Marcos disse, sempre que puder evitar de utilizar trigger na aplicação, evite.
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.
Responder

Gostei + 0

29/05/2015

Nei

mais como chamar uma procedure ou uma function pelo delphi
Responder

Gostei + 0

29/05/2015

Marcos P

Qual a versão do seu Delphi e qual componente de acesso aos dados você utiliza ?
Responder

Gostei + 0

29/05/2015

Nei

delphi xe7 e uso o firedac
Responder

Gostei + 0

29/05/2015

Marisiana Battistella

Você terá que utilizar um DataSet ou uma Query.. não lembro qual é..
Você irá chamar da mesma forma que você executa um SQL para retornar os dados...
Responder

Gostei + 0

29/05/2015

Marcos P

Responder

Gostei + 0

30/05/2015

Marisiana Battistella

Nei Junior, depois informe se conseguiu fazer, ou se continua com dúvida...
Responder

Gostei + 0

31/05/2015

Maycon

Nei Junior Dias Queiroz

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

Gostei + 0

31/05/2015

Maycon

Se resolver avisa
Responder

Gostei + 0

31/05/2015

Nei

A ptocedure funciona certinho, quando vou insert deletar etc, a questão é chamar ela pelo delphi quando for insrrir novo item, entendeu?
Responder

Gostei + 0

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

Aceitar