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
-------------------------------------------
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? |