Problema con función
Publicado por José Vicente (28 intervenciones) el 23/06/2023 06:06:49
Hola, tengo un problema con una función que no consigo solucionar. Con la función intento extraer de un conjunto de tablas aquellos alimentos cuyos valores calóricos sumados hacen la cantidad propuesta además de no sobrepasar el índice glucémico propuesto. Dejo por aquí mi código para que le deis un vistazo a ver si veis algo que yo no veo. Gracias.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
CREATE OR REPLACE FUNCTION public.generar_menu_suma(max_calorias integer, max_indice_glucemico integer)
RETURNS TABLE(alimento character varying, indice_glucemico integer, calorias integer)
LANGUAGE plpgsql
AS $function$
BEGIN
RETURN QUERY
WITH alimentos_temp AS (
SELECT grupo.alimento, grupo.indice_glucemico, grupo.calorias
FROM (
SELECT public.grupo1.alimento, public.grupo1.indice_glucemico, public.grupo1.calorias FROM public.grupo1 WHERE public.grupo1.calorias <= max_calorias
UNION ALL
SELECT public.grupo2.alimento, public.grupo2.indice_glucemico, public.grupo2.calorias FROM public.grupo2 WHERE public.grupo2.calorias <= max_calorias
UNION ALL
SELECT public.grupo3.alimento, public.grupo3.indice_glucemico, public.grupo3.calorias FROM public.grupo3 WHERE public.grupo3.calorias <= max_calorias
UNION ALL
SELECT public.grupo4.alimento, public.grupo4.indice_glucemico, public.grupo4.calorias FROM public.grupo4 WHERE public.grupo4.calorias <= max_calorias
UNION ALL
SELECT public.grupo5.alimento, public.grupo5.indice_glucemico, public.grupo5.calorias FROM public.grupo5 WHERE public.grupo5.calorias <= max_calorias
UNION ALL
SELECT public.grupo6.alimento, public.grupo6.indice_glucemico, public.grupo6.calorias FROM public.grupo6 WHERE public.grupo6.calorias <= max_calorias
UNION ALL
SELECT public.grupo7.alimento, public.grupo7.indice_glucemico, public.grupo7.calorias FROM public.grupo7 WHERE public.grupo7.calorias <= max_calorias
) AS grupo
)
SELECT alimentos_temp.alimento, alimentos_temp.indice_glucemico, alimentos_temp.calorias
FROM alimentos_temp
WHERE (
SELECT SUM(grupo.calorias) FROM alimentos_temp AS grupo
) = max_calorias
AND (
SELECT SUM(grupo.indice_glucemico) FROM alimentos_temp AS grupo
) = max_indice_glucemico;
IF NOT FOUND THEN
RAISE INFO 'No se encontró ningún menú que cumpla con las condiciones especificadas.';
END IF;
END;
$function$
;
Valora esta pregunta


0