Olá a todos os membros do forum, estou precisando de ajuda em uma função que faça o seguinte.  Ela vai fazer uma consulta em uma tabela e vai atribuir o(s) id(s) de um (ou mais) usuario(s) a uma variavel local, uma vez que que ela retorna o id atravéz de um loop este id vai ser atribuido a variavel da função que vai servir de parametro para uma nova consulta.   O objetivo geral desta função é retornar o valor total de um contador que vai ser incrementado a cada volta do loop.   Abaixo segue a função     DELIMITER $$  DROP FUNCTION IF EXISTS `trade`.`indicador` $$ CREATE DEFINER=`root`@`localhost` FUNCTION `indicador`(parametro INTEGER) RETURNS int(11) BEGIN      DECLARE indicador INTEGER;      DECLARE contador INTEGER;       SET contador = 0;       SET indicador = (SELECT indicador.idusuarios FROM indicador WHERE indicador.idindicador=parametro);            WHILE (SELECT @indicador2:=indicados.idusuarios FROM indicados WHERE indicados.idindicador=indicador) DO            SET indicador = @indicador2;            SET contador = contador+1;      END WHILE;       RETURN contador;  END $$  DELIMITER ;  O problema que encontrei é que o laço não esta sendo executado, gostaria de saber se existe alguma forma de atribuir o resultado da consulta a uma variavel local.  Acho que aqui está o erro.  indicador = (SELECT indicados.idindicador FROM indicador, indicados WHERE indicador.idindicador=indicados.idindicador AND indicador.idindicador=parametro)  Tentei melhorar um pouco o codigo más não retorna nada  DELIMITER $$  DROP FUNCTION IF EXISTS `trade`.`indicador` $$ CREATE DEFINER=`root`@`localhost` FUNCTION `indicador`(parametro INTEGER) RETURNS int(11) BEGIN      DECLARE indicador INTEGER;      DECLARE contador INTEGER;       SET contador = 0;            SET indicador = (SELECT @indicador:=indicador.idusuarios FROM indicador WHERE indicador.idindicador=parametro);            WHILE (SELECT @indicador2:=indicados.idusuarios FROM indicados WHERE indicados.idindicador=@indicador) DO            SET parametro = @indicador2;            SET contador = contador+1;       END WHILE;       RETURN contador;  END $$  DELIMITER ;