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!