Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

0
respostas

DÚVIDAS

![](Insira aqui a descrição dessa imagem para ajudar na acessibilidade )!
fiz passo a passo mas não tá saindo NULL no descontoAplicado e valorFinal

DELIMITER $$

CREATE TRIGGER AtualizaResumoAluguel
AFTER INSERT ON alugueis
FOR EACH ROW
BEGIN

DECLARE desconto DECIMAL(10,2);
DECLARE valorFinal DECIMAL(10,2);

SET desconto = CalcularDescontoPorDIas(NEW.aluguel_id);

SET valorFinal = CalcularValorFinalComDesconto(NEW.aluguel_id);

INSERT INTO resumo_aluguel
(
    aluguel_id,
    cliente_id,
    valorTotal,
    descontoAplicado,
    valorFinal
)
VALUES
(
    NEW.aluguel_id,
    NEW.cliente_id,
    NEW.preco_total,
    desconto,
    valorFinal
);

END$$

DELIMITER ;

SELECT * FROM resumo_aluguel;

INSERT INTO alugueis(aluguel_id, cliente_id, hospedagem_id, data_inicio, data_fim, preco_total)
VALUES (10002, 42, 15, '2024-01-01', '2024-01-08', 3000.00);

DROP TRIGGER IF EXISTS AtualizaResumoAluguel;

SELECT CalcularValorFinalComDesconto('10001');

SELECT CalcularDescontoPorDIas('10001');

DELIMITER $$
CREATE FUNCTION CalcularValorFinalComDesconto(AluguelID INT)
RETURNS DECIMAL(10,2) DETERMINISTIC
BEGIN
DECLARE ValorTotal DECIMAL(10,2);
DECLARE Desconto INT;
DECLARE ValorFinal DECIMAL(10,2);
SELECT preco_total INTO ValorTotal FROM alugueis
WHERE aluguel_id = AluguelID;

SET Desconto = CalcularDescontoPorDIas(AluguelID);

SET ValorFinal = ValorTotal - (ValorTotal * Desconto / 100);

RETURN ValorFinal;
END $$
DELIMITER ;

SELECT CalcularValorFinalComDesconto(1);

DELIMITER $$
CREATE FUNCTION CalcularDescontoPorDIas(AluguelID INT)
RETURNS INT DETERMINISTIC
BEGIN
DECLARE desconto INT;
SELECT
CASE
WHEN DATEDIFF(data_fim, data_inicio) BETWEEN 4 AND 6 THEN 5
WHEN DATEDIFF(data_fim, data_inicio) BETWEEN 7 AND 9 THEN 10
WHEN DATEDIFF(data_fim, data_inicio) >= 10 THEN 15
ELSE 0
END INTO desconto
FROM alugueis
WHERE cliente_id = AluguelID;
RETURN desconto;
END$$
DELIMITER ;

SELECT CalcularDescontoPorDIas(1);