3
respostas

[Bug] Cálculo da Procedure não realizado

A PROCEDURE FOI CRIADA E OS VALORES RETORNAM, MAS O CALCULO NÃO.

OBS.: Já declarei a "vPrecoUnitario", mas não mudou nada, então como não tem precisão, retirei. O erro que apresenta é "vPrecoUnitario" não reconhecida.

Segue código

USE `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 INT DEFAULT 0;
    DECLARE vPrecoTotal DECIMAL (10,2);
    SET vDias = (SELECT DATEDIFF (vDataFinal, vDataInicio));
    SET vPrecoTotal = vDias * PrecoUnitario;
    INSERT INTO alugueis VALUES (vAluguel, vCliente, vHospedagem, vDataInicio, vDataFinal, vPrecoTotal);
END$$
DELIMITER ;

CALL novoAluguel_24('10004', '1004', '8635', '2023-03-13', '2023-03-16', 40);
SELECT * FROM alugueis WHERE aluguel_id = '10004'; 

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

3 respostas

Olá, Francianny, tudo bem?

O problema está na linha onde você tenta calcular vPrecoTotal. O erro "Unknown column 'PrecoUnitario' in 'field list'" indica que a coluna PrecoUnitario não está sendo reconhecida. Isso ocorre porque você está tentando usar PrecoUnitario diretamente, mas deveria usar vPrecoUnitario, que é o nome do parâmetro passado para a procedure.

Além disso, notei que no CREATE você coloca como parâmetro o vPrecoUnitario. Você não compartilhou a aula, mas caso esteja seguindo a aula Atribuição de valores, você deverá inserir como parâmetro em CREATE o vPrecoTotal DECIMAL(10,2):

USE `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, vPrecoTotal DECIMAL(10,2))
BEGIN
    DECLARE vDias INT 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 ;

CALL novoAluguel_24('10004', '1004', '8635', '2023-03-13', '2023-03-16', 40);
SELECT * FROM alugueis WHERE aluguel_id = '10004'; 

A correção foi feita na linha onde vPrecoTotal é calculado, substituindo PrecoUnitario por vPrecoUnitario. E no parâmetro em CREATE, inserindo o vPrecoTotal DECIMAL(10,2).

Espero ter ajudado.

Qualquer dúvida, não hesite em compartilhar no fórum.

Abraços e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!

Oii, mesmo assim continua apresentando o mesmo erro :(

Oi Francianny,

Primeiramente, peço desculpas pela demora no retorno.

Testei o código disponível na transcrição da aula e obtive o mesmo erro que você encontrou. Então, notei que, na verdade, o parâmetro vPrecoUnitario no CREATE do seu código estava correto. A transcrição já foi corrigida, e lamento pelo equívoco e pelo transtorno.

No entanto, o erro no seu código está na atribuição da variável vPrecoTotal. Você definiu corretamente o parâmetro vPrecoUnitario no CREATE, mas ao atribuir o valor para vPrecoTotal, utilizou PrecoUnitario (sem o "v").

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

O código deverá ser SET vPrecoTotal = vDias * vPrecoUnitario;

Segue o código corrigido:

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 ;

CALL novoAluguel_24('10004', '1004', '8635', '2023-03-13', '2023-03-16', 40)

Qualquer dúvida, estou à disposição!

Um grande abraço e até mais!