Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

charles7x0

[Resolvido] Função com um select e um case dentro

Recommended Posts

aew galera peguei a difícil missão de converter um banco de dados sql server 2005 para o mysql 5.1 e algumas coisas tenho q fazer manualmente, como por exemplo as funções do banco.

ja rodei no google atrás de uma solução e não achei, quando vou criar essa function gera o erro "Error Code : 1415 Not allowed to return a result set from a function" por favor galera me ajuda q esse banco tem mais de 300 tabelas e vou ter muiiiito trabalho ainda. segue o código abaixo

 

DELIMITER //
CREATE FUNCTION fn_Coeficiente_Rendimento (COD_MATRICULA INTEGER)
RETURNS FLOAT
BEGIN
DECLARE COEFICIENTE_RENDIMENTO FLOAT;
 
 	SELECT COEFICIENTE_RENDIMENTO = COALESCE(SUM(MP.NOTA * DMC.CREDITOS),0)/
 			   CASE WHEN (SUM(DMC.CREDITOS) IS NULL) OR (SUM(DMC.CREDITOS) = 0) THEN 1
 				    ELSE SUM(DMC.CREDITOS)
 			   END
       FROM MATRICULAS_PAUTAS MP, PAUTAS P, 
 		   DISCIPLINAS_MATRIZES_CURRICULARES DMC, 
 		   MATRICULAS M, HABILITACOES H
 	 WHERE MP.COD_PAUTA = P.COD_PAUTA
 	   AND MP.COD_MATRICULA = M.COD_MATRICULA
 	   AND MP.COD_DISCIPLINA = DMC.COD_DISCIPLINA
 	   AND M.COD_MATRIZ_CURRICULAR = DMC.COD_MATRIZ_CURRICULAR
 	   AND MP.SIT_MATRICULA_PAUTA IN ( 
 		   4, -- APROVADO 
 		   5, -- REPROVADO
 		   6, -- REPROVADO POR FALTA
 		   16, -- REPROVADO MÓDULO
 		   26  -- APROVADO/REP. NO MÓDULO
 		   )
 	   AND MP.COD_MATRICULA = M.COD_MATRICULA
 	   AND H.COD_HABILITACAO = M.COD_HABILITACAO
 	   AND MP.NOTA IS NOT NULL
 	   AND (DMC.COD_HABILITACAO = M.COD_HABILITACAO OR H.BASICA = 1)
 	   AND M.COD_MATRICULA = COD_MATRICULA;
 
 	RETURN CAST(COEFICIENTE_RENDIMENTO AS DECIMAL(5,2));
END;//

Compartilhar este post


Link para o post
Compartilhar em outros sites

Para retornar um result set, converta a function em questão para uma Stored Procedure.

No MySQL não será possível criar um função como no SQL Server que tem as chamadas "table functions".

 

Happy MySQL'ing!!! http://forum.imasters.com.br/public/style_emoticons/default/clap.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

valew pela dica!

 

mas eu ainda não entendi direito. Pelo que dá para entender desta function é que ela irá retornar apenas um valor, pois ela faz um calculo e retorna apenas o resultado do calculo ou eu estou entendendo errado??

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.