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
Pergunta
Gleison Pereira
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 ;
Editado por Gleison PereiraLink para o comentário
Compartilhar em outros sites
1 resposta a esta questão
Posts Recomendados