Ei, Diogo! Tudo bem?
O erro está apontando para vDias
, mas a variável está correta, o problema pode estar sendo causado em outra parte, como o MySQL está interpretando essa parte do código.
Espaços extras entre o código e a versão do MySQL que não suporta a sintaxe, pode ser um dos motivos, então peço que revise o código e deixe a versão mais atual do MySQL instalada.
E percebi que na primeira linha está como SE insight_places;
enquanto o correto seria USE insight_places;
. Outro ponto é o valor de ID para novo_aluguel_24
que esta como 10005
, 1005
e na aula foi gerado como 10004
, 1004
. A variável vAluguel
é 0 aúnica que está como maiúscula e pela lógica, seria em minúsculo vAlguel
.
Com base nisso, vamos reescrever o seu código dessa forma:
USE `insightplaces`;
DROP PROCEDURE IF EXISTS `insightplaces`.`novoAluguel_24`;
DELIMITER $$
USE `insightplaces`$$
CREATE DEFINER=`root`@`localhost` PROCEDURE `novoAluguel_24`
(vAluguel VARCHAR(10), vCliente VARCHAR(10), vHospedagem VARCHAR(10), vDataInicio DATE, vDataFinal DATE, vPrecoUnitario DECIMAL(10,2))
BEGIN
DECLARE vDias INTEGER DEFAULT 0;
DECLARE vPrecoTotal DECIMAL(10,2);
SET vDias = (SELECT DATEDIFF (vDataFinal, vDataInicio));
SET vPrecoTotal = vDias * vPrecoUnitario;
INSERT INTO alugueis VALUES (vAluguel, vCliente, vHospedagem, vDataInicio, vDataFinal, vPrecoTotal);
END$$
DELIMITER ;
-- Chamada da procedure
CALL novoAluguel_24('10004', '1004', '8635', '2023-03-13', '2023-03-16', 40.00);
SELECT * FROM alugueis WHERE aluguel_Id = '10004';
Após revisar todo o código e reescrevê-lo, rode novamente e observe se funciona como esperado.
Espero ter ajudado e qualquer dúvida, compartilhe no fórum.
Até mais, Diogo!
Caso este post tenha lhe ajudado, por favor, marcar como solucionado!