Executar uma Procedure que retorne um percentual.[RESOLVIDO]

6 respostas
NixonMarinho

6 Respostas

drsmachado

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.

NixonMarinho
drsmachado

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.

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.

drsmachado

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

NixonMarinho

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