Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Fagner

Trigger não funciona

Recommended Posts

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

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

 

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

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.