Creio que temos uma chance de melhoria nesta procedure, pois ela tem o intuíto de calcular apenas os dias úteis para demonstração do valor total, porém os parâmetros da procedure ainda necessita que o próprio usuário faça as contas, inutilizando todo o algoritmo imposto, fazemos um contador que considera apenas os dias úteis, mas no momento de calcular o valor total, temos o cálculo dos dias inseridos pelo usuário.
Além do bug apontado pelo aluno Matheus, eu adicionei e modifiquei para que tenhamos um contador dos dias corridos (para passar pelo loop) e um contador de dias úteis, para somar apenas quando não for sábado ou domingo. Depois, coloquei este último contador no cálculo do valor total, com isso, usuário pode apenas colocar o valor total dos dias hospedado que o retorno já vai ser o correto. Abaixo a procedure que montei
USE `insight_places`;
DROP procedure IF EXISTS `insight_places`.`novo_aluguel_42`;
DELIMITER $$
USE `insight_places`$$
CREATE DEFINER=`root`@`localhost` PROCEDURE `novo_aluguel_42`
(v_aluguel varchar(10), v_cliente_nome varchar(150), v_hospedagem varchar(10),
v_data_inicio date, v_dias integer, v_preco_unitario decimal(10,2))
BEGIN
    declare v_cliente varchar(10);
    declare v_dias_uteis integer; -- Contador para cálculo do preço total
    declare v_dias_corridos integer; -- Contador geral
    declare v_dia_semana integer;
    declare v_data_final date;
    declare v_num_clientes integer;
    declare v_preco_total decimal(10,2);
    declare v_mensagem varchar(100);
    declare exit handler for 1452
    begin
        set v_mensagem = 'Problema de chave estrangeira associado a alguma entidade da base';
        select v_mensagem;
    end;
    set v_num_clientes = (select count(*) from clientes where nome = v_cliente_nome);
    case
    when v_num_clientes = 0 then
        set v_mensagem = 'Nome de cliente não localizado na base para inclusão';
        select v_mensagem;
    when v_num_clientes = 1 then
        -- set v_data_final = (select v_data_inicio + interval v_dias day);
        set v_dias_uteis = 0;
        set v_dias_corridos = 0;
        set v_data_final = v_data_inicio;
        while v_dias_corridos < v_dias do
            set v_dia_semana = dayofweek(v_data_final);
            if (v_dia_semana <> 7 and v_dia_semana <> 1) then
                set v_dias_uteis = v_dias_uteis + 1;
            end if;
            set v_data_final = (select v_data_final + interval 1 day);
            set v_dias_corridos = v_dias_corridos + 1;
        end while;
        set v_preco_total = v_dias_uteis * v_preco_unitario; -- Contanto apenas os dias úteis e não os dias que o usuário inserir
        select cliente_id into v_cliente from clientes where nome = v_cliente_nome;
        insert into reservas values(v_aluguel, v_cliente, v_hospedagem, v_data_inicio,
        v_data_final, v_preco_total);
        set v_mensagem = 'Reserva incluída na base com sucesso!';
        select v_mensagem;
    when v_num_clientes > 1 then
        set v_mensagem = 'Não é possível utilizar este nome para a inclusão, mais de 1 cliente na base';
        select v_mensagem;
    end case;
END$$
DELIMITER ;
 
             
             Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!
   Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!