1
resposta

Dúvida: Atribuindo valor usando SELECT

Olá, estou tentando acompanhar as aulas usando os exemplos para praticar, porém na aula onde usamos o SELECT para a atriuição de valor algo dá errado na minha QUERY que o resultado não insere o nome do cliente, tornando o resultado final NULL.

Segue a Transcição da query:

/*Inserção de dados usando o SELECT*/
    SELECT * FROM clientes;
USE `insight_places`;
DROP procedure IF EXISTS `insight_places`.`novo_aluguel_26`;
;

DELIMITER $$
USE `insight_places`$$
CREATE DEFINER=`root`@`localhost` PROCEDURE `novo_aluguel_26`
(vAluguel VARCHAR(10),  vClienteNome VARCHAR(150), vHospedagem VARCHAR(10), vDataInicio DATE, vDataFinal DATE,
vPrecoUnitario DECIMAL(10,2)) /*VprecoUnitario Só me pasas o valor unitário da diária e é independente do preço final, que deve ser calculado
declarando uma variável */
BEGIN
    DECLARE vCliente VARCHAR (10);
    DECLARE vdias INTEGER DEFAULT 0;
    DECLARE vPrecoTotal DECIMAL(10,2);
    DECLARE vMensagem VARCHAR (100);
    DECLARE EXIT HANDLER FOR 1452 -- Caso na declaração da varo=iável aconteça algum erro 1452 será exibido essa mensagem
    BEGIN
        SET vMensagem = 'Problema de Chave Estrangeira associada a alguma entidade da base.';
        SELECT vMensagem; --  Tem que lembrar de chamar a mensagem
    END;
    SET vdias = (SELECT DATEDIFF(vDataFinal, vDataInicio)); -- Calculo da quantidade de dias 
    SET vPrecoTotal = vDias * vPrecoUnitario; -- Calculo do preco total do aluguel após a declaração da variavel de dias
    SELECT cliente_id INTO vCliente FROM clientes WHERE nome = vClienteNome; -- Ao executar essa colsuta o resultado do idCLiente será o vCliente (usar o INTO)
    INSERT INTO alugueis VALUES (vAluguel, vCliente, vHospedagem, vDataInicio, vDataFinal, vPrecoTotal);
    SET vMensagem = 'Aluguel incluido com sucesso';
    SELECT vMensagem;

    
    
END$$

DELIMITER ;

CALL novo_aluguel_26('20', 'Murilo Melo','9','2024-08-26','2024-09-01',35);
SELECT * FROM alugueis WHERE aluguel_id = '19';

Onde eu estou errando, alguém poderia me ajudar por gentileza?

1 resposta

Olá, tudo bem?

Se o valor de vCliente está retornando NULL, é possível que a consulta SELECT cliente_id FROM clientes WHERE nome = vClienteNome não esteja encontrando nenhum registro correspondente.

Portanto, peço que verifique se esse cliente existe na tabela clientes

SELECT * FROM clientes WHERE nome = 'Murilo Melo';

Se essa consulta não retornar nenhum resultado, então o nome do cliente não existe na tabela e, com isso, a variável vCliente será NULL.

Caso o problema persista, peço que compartilhe a mensagem erro do código.

Qualquer dúvida, compartilhe no fórum.

Abraços e bons estudos!

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