Executar uma Procedure que retorne um percentual.[RESOLVIDO]

6 respostas
N

6 Respostas

D

Todas as vezes que fiz procedure para retornar valores, nunca precisei declarar variável out.
Tente retirar o

out PercentualTipo double

Provavelmente irá funcionar, tendo em vista que você está realizando um select.
Ou, mais adequado, crie uma function.

N
D

Camarada, resolvi testar, embora já soubesse que teria êxito e, consegui.
Minha procedure está assim

DELIMITER $$

DROP PROCEDURE IF EXISTS `gestloc`.`procPerc` $$
CREATE PROCEDURE `gestloc`.`procPerc` ()
BEGIN
  SELECT truncate(((SELECT count(tipo) from titulo where tipo = 1 )*100/count(*)),0) FROM titulo;
END $$

DELIMITER ;

Alterei o select, pois, como o seu está, ele irá apenas contar os 3 tipos de material = utilizavel, retornando 100%.
Quando faço um subselect, aí ele conta e retorna corretamente.

Chamando call procPerc(); o resultado foi 25 (tenho 8 registros, 2 são = 1, pois 2 * 100 / 8 = 25).

Já a function

DELIMITER $$

DROP FUNCTION IF EXISTS `gestloc`.`funcPerc` $$
CREATE FUNCTION `gestloc`.`funcPerc` () RETURNS FLOAT
BEGIN
  DECLARE perc float;
  SELECT truncate(((SELECT count(tipo) from titulo where tipo = 1 )*100/count(*)),0) into perc FROM titulo;
  return perc;
END $$

DELIMITER ;

Chamando

select funcPerc();

Resultado: 25

Para deixar a coisa mais interessante, resolvi colocar a opção de informar o tipo dinamicamente

DELIMITER $$

DROP PROCEDURE IF EXISTS `gestloc`.`procPerc` $$
CREATE PROCEDURE `gestloc`.`procPerc` (IN tipov int)
BEGIN
  SELECT truncate(((SELECT count(tipo) from titulo where tipo = tipov )*100/count(*)),0) FROM titulo;
END $$

DELIMITER ;

E, chamando call procPerc(1);
O resultado é: 25.

N

Muitooooo obrigado :smiley:

Deu certinho aqui, fiz em cima de sua estrutura uma procedure e uma função e funcionou direitinho.
A minha estrutura mesmo mal feita, ainda chegou a funcionar no DreamCoder for MySql mas não era eficaz.

É bom ter com quem contar quando se é iniciante :slight_smile:

Valeu mesmo, Até mais.

D

NixonMarinho:
Muitooooo obrigado :smiley:

Deu certinho aqui, fiz em cima de sua estrutura uma procedure e uma função e funcionou direitinho.
A minha estrutura mesmo mal feita, ainda chegou a funcionar no DreamCoder for MySql mas não era eficaz.

É bom ter com quem contar quando se é iniciante :slight_smile:

Valeu mesmo, Até mais.


Stored Procedures são sempre soluções interessantes, porém, não são funcionais em 100% dos projetos (assim como todos os frameworks, recursos e tudo mais).

De qualquer forma, tente o MySQL Query Browser, ele monta a estrutura básica, você só precisa criar a lógica.

Obs.: Edite o tópico inicial e coloque [resolvido] no título

N

ok…

Estou seguindo sua sugestão.
Título alterado. :slight_smile:

Criado 21 de junho de 2011
Ultima resposta 24 de jun. de 2011
Respostas 6
Participantes 2