Fagner 1 Denunciar post Postado Abril 27, 2016 Bom dia, possuo a tabela VENDAS que tem uma trigger que deve realizar uma baixa na quantidade da tabela PRODUTOS e inserir o detalhe da venda na tabela VENDAS_DETALHES. Porém a trigger não realiza nem uma tarefa nem outra, e também não apresenta erro algum ao executar. segue para verificação de oque possa estar errado. BEGIN /* VARIAVEIS */ DECLARE I INTEGER; DECLARE DATAVENC DATE; DECLARE PARCELA DECIMAL; SET DATAVENC = NEW.DATAVENDA; SET PARCELA = ((NEW.QUANTIDADE * NEW.VALOR) / NEW.NUMPARCELAS); SET @I = 0; /* BAIXA ESTOQUE */ UPDATE produtos SET QUANTIDADE = QUANTIDADE - NEW.QUANTIDADE WHERE CODIGO = NEW.CODPRODUTO; /* GRAVA ITENS VENDIDOS */ WHILE I <= NEW.QUANTIDADE DO INSERT INTO `vendas_detalhes` (CODIGO,CODCLIENTE,CODPRODUTO,CODVENDA,VALOR,VENCIMENTO,STATUS) VALUES (NULL,NEW.CODCLIENTE,NEW.CODPRODUTO,NEW.CODIGO,PARCELA,DATAVENC,1); SET I = I+1; END WHILE; END Tem muito mais coisa a ser implementado na trigger porém essas linhas básicas já não está funcionando.... kkk Alguém tem ideia de oque pode ser? Compartilhar este post Link para o post Compartilhar em outros sites
lokaodomau 61 Denunciar post Postado Abril 27, 2016 Lembrou do DELIMITER? # Altera o delimiter pra criar a trigger DELIMITER // # Cria a trigger com mais de um comando (fechando a SQL com ; normalmente) # Volta delimiter pro normal DELIMITER ; Compartilhar este post Link para o post Compartilhar em outros sites
Fagner 1 Denunciar post Postado Abril 27, 2016 CREATE DEFINER = 'siste362'@'localhost' TRIGGER `vendas_after_ins_tr` AFTER INSERT ON `vendas` FOR EACH ROW BEGIN /* VARIAVEIS */ DECLARE I INTEGER; DECLARE DATAVENC DATE; DECLARE PARCELA DECIMAL; DECLARE DISPONIVEL INTEGER; SET DATAVENC = NEW.DATAVENDA; SET PARCELA = ((NEW.QUANTIDADE * NEW.VALOR) / NEW.NUMPARCELAS); SET @I = 0; SET @DISPONIVEL = 0; SELECT QUANTIDADE INTO @DISPONIVEL FROM produtos WHERE CODIGO = NEW.CODPRODUTO; /* VERIFICA SE TEM ESTOQUE SUFICIENTE */ IF NEW.QUANTIDADE <= @DISPONIVEL THEN /* BAIXA ESTOQUE */ UPDATE produtos SET QUANTIDADE = QUANTIDADE - NEW.QUANTIDADE WHERE CODIGO = NEW.CODPRODUTO; /* GRAVA ITENS VENDIDOS */ WHILE @I <= NEW.QUANTIDADE DO INSERT INTO `vendas_detalhes` (CODIGO,CODCLIENTE,CODPRODUTO,CODVENDA,VALOR,VENCIMENTO,STATUS) VALUES (NULL,NEW.CODCLIENTE,NEW.CODPRODUTO,NEW.CODIGO,PARCELA,DATAVENC,1); SET @I = @I+1; END WHILE; ELSE SIGNAL SQLSTATE '45000' SET message_text = 'ESTOQUE INSUFICIENTE'; END IF; END; Compartilhar este post Link para o post Compartilhar em outros sites
lokaodomau 61 Denunciar post Postado Abril 28, 2016 CREATE DEFINER = 'siste362'@'localhost' TRIGGER `vendas_after_ins_tr` AFTER INSERT ON `vendas` FOR EACH ROW BEGIN /* VARIAVEIS */ DECLARE I INTEGER; DECLARE DATAVENC DATE; DECLARE PARCELA DECIMAL; DECLARE DISPONIVEL INTEGER; SET DATAVENC = NEW.DATAVENDA; SET PARCELA = ((NEW.QUANTIDADE * NEW.VALOR) / NEW.NUMPARCELAS); SET @I = 0; SET @DISPONIVEL = 0; SELECT QUANTIDADE INTO @DISPONIVEL FROM produtos WHERE CODIGO = NEW.CODPRODUTO; /* VERIFICA SE TEM ESTOQUE SUFICIENTE */ IF NEW.QUANTIDADE <= @DISPONIVEL THEN /* BAIXA ESTOQUE */ UPDATE produtos SET QUANTIDADE = QUANTIDADE - NEW.QUANTIDADE WHERE CODIGO = NEW.CODPRODUTO; /* GRAVA ITENS VENDIDOS */ WHILE @I <= NEW.QUANTIDADE DO INSERT INTO `vendas_detalhes` (CODIGO,CODCLIENTE,CODPRODUTO,CODVENDA,VALOR,VENCIMENTO,STATUS) VALUES (NULL,NEW.CODCLIENTE,NEW.CODPRODUTO,NEW.CODIGO,PARCELA,DATAVENC,1); SET @I = @I+1; END WHILE; ELSE SIGNAL SQLSTATE '45000' SET message_text = 'ESTOQUE INSUFICIENTE'; END IF; END; Esta é a solução? Compartilhar este post Link para o post Compartilhar em outros sites