Re: Problema con IF N=?ISO-8859-1?Q?OT_FOUND_en_funci=F3?=n plpgsql

From: Sebastián Villalba <sebastian(at)fcm(dot)unc(dot)edu(dot)ar>
To: "Jaime Casanova" <systemguards(at)gmail(dot)com>
Cc: "Lista Ayuda Pgsql" <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: Re: Problema con IF N=?ISO-8859-1?Q?OT_FOUND_en_funci=F3?=n plpgsql
Date: 2006-04-20 13:22:06
Message-ID: 20060420125723.M46039@fcm.unc.edu.ar
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

On Wed, 19 Apr 2006 23:54:28 -0500, Jaime Casanova wrote
[...]
> It is generally unwise to select from database tables within an
> IMMUTABLE function at all
>
> traduccion libre:
>
> Generalmente es poco sabio (inteligente) ejecutar select sobre las
> tablas de la base de datos desde una funcion IMMUTABLE
>
> > Ahora... otra cosa que puede pasar es que yo con mi inglés que deja bastante
> > que desear, haya entendido cualquier cosa ;).
> >
>
> yo creo que eso fue

Gracias por tomarte la molestia. Como siempre muy clara tu explicación, me
tendré que poner a modificar mis funciones, siempre mal declaradas como
IMMUTABLE. :'(

[...]
> que pasa si ejecutas? no sera que si esta regresando un registro? y
> lo que ocurre es que el valor de cupo efectivamente es NULL?
>
> SELECT cupo FROM actividad WHERE id = 4;

test=# SELECT cupo FROM actividad WHERE id = 4;
cupo
------

(1 row)

La última versión de la función es ésta con idéntico resultado:

DECLARE
cupos INTEGER;
BEGIN
SELECT INTO cupos cupo FROM actividad WHERE id = $1; // Cupo para TODOS
IF NOT FOUND THEN
SELECT INTO cupos cupo FROM "cupoActividadPerfil" WHERE actividad_id = $1
AND perfil_id = $2; // Cupos para algunos
END IF;
RETURN cupos;
END;

Esa actividad (id = 4) no tiene cupo máximo, pero no se pueden aceptar mas de
5 alumnos (perfil 7 = "alumnos") en la misma. Si la actividad tiene cupo no
nulo, es para todos... eso es lo que controlo primero y ésta no tiene ningún
cupo (es decir en éste caso "cupo IS NULL"). Entonces me fijo si tiene un cupo
para el perfil informado (7 = alumnos) y eso es lo que hago en la segunda
consulta. En éste caso, la actividad 4 no tiene mas lugar para el perfil 7,
osea, me debería devolver 0. Saludos y nuevamente muchas gracias, espero que
se entienda.
-
-------------------------------------------
Sebastián Villalba
sebastian(at)fcm(dot)unc(dot)edu(dot)ar
-------------------------------------------

In response to

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Zulima 2006-04-20 13:24:23 paráetros pg_dump
Previous Message Alvaro Herrera 2006-04-20 12:52:30 Re: Debo usar Transacciones?