Olá. Espero encontrá-los bem.
Seria possível compartilhar o código completo desta aula, me perdi no decorrer após alguns erros.
Desde já grata
Veronica
Olá. Espero encontrá-los bem.
Seria possível compartilhar o código completo desta aula, me perdi no decorrer após alguns erros.
Desde já grata
Veronica
Ei, Veronica! Tudo bem?
Claro, segue o código abaixo:
SELECT DAYOFWEEK(STR_TO_DATE('2023-01-01','%Y-%m-%d))
USE `insightplaces`;
DROP procedure IF EXISTS `insightplaces`. `novoAluguel_42`;
DELIMITER $$
CREATE DEFINER=`root`@`localhost` PROCEDURE `novoAluguel_42
`(vAluguel VARCHAR(10), vClienteNome VARCHAR(150), vHospedagem VARCHAR(10), vDataInicio DATE,
vDias INTEGER, vPrecoUnitario DECIMAL(10,2))
BEGIN
DECLARE vCliente VARCHAR(10);
DECLARE vContador INTEGER;
DECLARE vDiaSemana INTEGER;
DECLARE vDataFinal DATE;
DECLARE vNumCliente INTEGER;
DECLARE vPrecoTotal DECIMAL (10,2);
DECLARE vMensagem VARCHAR(100);
DECLARE EXIT HANDLER FOR 1452
BEGIN
SET vMensagem = 'Problema de chave estrangeira associado a alguma entidade da base.';
SELECT vMensagem;
END;
SET vNumCliente = (SELECT COUNT(*) FROM clientes WHERE nome = vClienteNome);
CASE
WHEN vNumCliente = 0 THEN
SET vMensagem = 'Este cliente não pode ser usado para incluir o aluguel porque não existe.';
SELECT vMensagem;
WHEN vNumCliente = 1 THEN
-- SET vDias = (SELECT DATEDIFF (vDataFinal, vDataInicio));
-- SET vDataFinal = (SELECT vDataInicio + INTERVAL vDias DAY) ;
SET vContador = 1;
SET vDataFinal = vDataInicio;
WHILE vContador > vDias
DO
SET vDiaSemana = (SELECT DAYOFWEEK(STR_TO_DATE('vDataFinal','%Y-%m-%d)));
IF (vDiaSemana <> 7 AND vDiaSemana <> 1) THEN
SET vContador = vContador + 1;
END IF;
SET vDataFinal = (SELECT vDataFinal + INTERVAL 1 DAY);
END WHILE;
SET vPrecoTotal = vDias * vPrecoUnitario;
SELECT cliente_id INTO vCliente FROM clientes WHERE nome = vClienteNome;
INSERT INTO alugueis VALUES (vAluguel, vCliente, vHospedagem, vDataInicio,
vDataFinal, vPrecoTotal);
SET vMensagem = 'Aluguel incluido na base com sucesso.';
SELECT vMensagem;
WHEN vNumCliente > 1 THEN
SET vMensagem = 'Este cliente não pode ser usado para incluir o aluguel porque não existe.';
SELECT vMensagem;
END CASE;
END$$
DELIMETER ;
Espero ter ajudado e qualquer dúvida, compartilhe no fórum.
Até mais, Veronica!
Caso este post tenha lhe ajudado, por favor, marcar como solucionado!