Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Erro no SELECT ???

USE `insightplaces`;
DROP procedure IF EXISTS `insightplaces`.`novoAluguel_32`;
DELIMITER $$
USE `insightplaces`$$
CREATE DEFINER=`root`@`localhost` PROCEDURE `novoAluguel_32`
(vAluguel VARCHAR(10), vClienteNome VARCHAR(150), vHospedagem VARCHAR(10), vDataInicio  DATE, vDataFinal DATE, vPrecoUnitario DECIMAL(10,2))
BEGIN
    DECLARE vCliente VARCHAR;
    DECLARE vDias INTEGER DEFAULT 0;
    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);
    IF vNumCliente > 1 THEN
        SET vMensagem = 'Este cliente não pode ser usado para incluir o aluguel pelo nome.';
        SELECT vMensagem;
    ELSE
        SET vDias = (SELECT DATEDIFF (vDataFinal, vDataInicio));
        SET vPrecoTotal = vDias * vPrecoUnitario;
        SELECT cliente_id FROM clientes WHERE nome = vClienteNome; ## AQUI NÃO TERIA QUE USAR UM SET(SET vCliente = (SELECT cliente_id FROM clientes WHERE nome = vClienteNome);)
        INSERT INTO alugueis VALUES (vAluguel, vCliente, vHospedagem, vDataInicio, vDataFinal, vPrecoTotal);
        SET vMensagem = 'Aluguel incluído na base com sucesso.';
        SELECT vMensagem;
    END IF
END$$
DELIMITER ;

Na linha : SELECT cliente_id FROM clientes WHERE nome = vClienteNome; não teria que usar um SET?

SET vCliente = (SELECT cliente_id FROM clientes WHERE nome = vClienteNome);

Garanta sua matrícula hoje e ganhe + 2 meses grátis

Continue sua jornada tech com ainda mais tempo para aprender e evoluir

Quero aproveitar agora
1 resposta
solução!

Olá Terezinha, tudo bem?

Neste caso, o SET seria mais apropriado. O SELECT sozinho apenas retorna o valor, mas não o atribui a nenhuma variável. Para que o valor do cliente_id seja armazenado na variável vCliente e possa ser usado posteriormente na instrução INSERT, precisamos usar o SET .

SET vCliente = (SELECT cliente_id FROM clientes WHERE nome = vClienteNome);

Espero ter esclarecido.

Qualquer dúvida que surgir, compartilhe no fórum. Abraços e bons estudos!

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