PostgreSQL - Problema con función

 
Vista:
sin imagen de perfil
Val: 39
Ha aumentado 1 puesto en PostgreSQL (en relación al último mes)
Gráfica de PostgreSQL

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
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Francisco
Val: 256
Oro
Ha mantenido su posición en PostgreSQL (en relación al último mes)
Gráfica de PostgreSQL

Problema con función

Publicado por Francisco (110 intervenciones) el 29/06/2023 19:33:38
Hola

Y cual es exactamente el error ??

Saudos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 39
Ha aumentado 1 puesto en PostgreSQL (en relación al último mes)
Gráfica de PostgreSQL

Problema con función

Publicado por José Vicente (28 intervenciones) el 30/06/2023 05:34:57
Hola, el error es que no hace nada, no devuelve ningún resultado, da igual los valores que le pases, no devuelve nada.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar