1
resposta

[Bug] estou com um bug, descreverei abaixo, alguem me ajuda pfv

Error Code: 1193. Unknown system variable 'vDias'
este e meu erro ao tentar iniciar o DATADIFF

SE insight_places;
DROP procedure IF EXISTS insight_places.novoAluguel_24
DELIMITER $$
USE insight_places$$
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 = (DATEDIFF (vDataFinal, vDataInicio));
SET vPrecoTotal = vDias * vPrecoUnitario;
INSERT INTO alugueis VALUES (VAluguel, vCliente, vHospedagem, vDataInicio, vDataFinal, vPrecoTotal);
END$$

DELIMITER $$

CALL novoAluguel_24('10005', '1005', '8635', '2023-03-13', '2023-03-16', 40);
SELECT * FROM alugueis WHERE aluguel_Id ='10005';

1 resposta

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!