Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

[Dúvida] Procedure retornando tabelas nulas

As tabelas estão sendo selecionada aparecendo, aparentemente, para cada cliente, mas o select está voltando com valor NULL.

CREATE DEFINER=`root`@`localhost` PROCEDURE `DadosCliente`()
BEGIN
    DECLARE endPoint INT DEFAULT 0;
    DECLARE vNome, vEndereco varchar(150);
    DECLARE vBairro, vCidade varchar(50);
    DECLARE vEstado, CEP varchar(10);
    
    DECLARE c CURSOR FOR 
    SELECT 	NOME, ENDERECO_1, 
                BAIRRO, CIDADE, 
                ESTADO, CEP 
    FROM tabela_de_clientes;
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET endPoint = 1;
    OPEN c;
    WHILE endPoint = 0 DO
        FETCH c INTO vNome, vEndereco, vBairro, vCidade, vEstado, CEP;
        IF endPoint = 0 THEN
            SELECT CONCAT(vNome,' Endereço: ', vEndereco,' - ', vCidade,', ', vEstado, ', ', vBairro, '. CEP:  ', CEP) as DadosCliente;
        END IF;
    END WHILE;
    CLOSE c;
END
3 respostas

Olá, João!

Pelo código que você compartilhou, parece que sua Procedure está correta viu. No entanto, o problema que você está enfrentando pode ser devido a dados nulos em sua tabela tabela_de_clientes.

Se houver alguma coluna (NOME, ENDERECO_1, BAIRRO, CIDADE, ESTADO, CEP) com valor nulo para um determinado cliente, a concatenação resultará em um valor nulo e, portanto, o SELECT retornará NULL.

Uma maneira de contornar isso é usando a função IFNULL do MySQL. Esta função permite que você retorne um valor alternativo se o valor original for NULL. Aqui está um exemplo de como você pode usá-lo:

SELECT CONCAT(IFNULL(vNome,''), ' Endereço: ', IFNULL(vEndereco,''), ' - ', IFNULL(vCidade,''), ', ', IFNULL(vEstado,''), ', ', IFNULL(vBairro,''), '. CEP:  ', IFNULL(CEP,'')) as DadosCliente;

Neste exemplo, se qualquer uma das variáveis for NULL, a função IFNULL substituirá o valor NULL por uma string vazia (''). Assim, você não terá mais problemas com valores NULL.

Espero ter ajudado e bons estudos!

tabela_de_clientes: Insira aqui a descrição dessa imagem para ajudar na acessibilidadeProcedure está retornado todos os valores assim: Insira aqui a descrição dessa imagem para ajudar na acessibilidade

solução!

Achei o erro. a variável declarada no procedure tinha o mesmo nome da variável na tabela. dando conflito. Obg, Natan, se n fosse a dica do IFNULL não teria identificado isso. Vlw!