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 ;