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-19 14:19:36 |
Message-ID: | 20060419102126.M7554@fcm.unc.edu.ar |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-es-ayuda |
Gracias Rubén, Jaime y Alvaro por responder...
On Tue, 18 Apr 2006 23:36:58 -0500, Jaime Casanova wrote
> esta funcion no deberia ser declarada IMMUTABLE, porque accesa a la
> base de datos, algo que no debe hacer *ninguna* funcion que sea
> IMMUTABLE... (no tiene nada que ver con tu duda, por eso no voy a
> hacer mucho comentario sobre eso ;)
Es cierto que no es mi duda, no obstante creo que no hay ningún problema en
ser declarada como IMMUTABLE ya que solamente accede para hacer un SELECT, no
para modificar datos. Al hacer solamente consulta, entiendo que es mas
eficiente según lo indica en:
http://www.postgresql.org/docs/8.1/static/xfunc-volatility.html
Ahora... otra cosa que puede pasar es que yo con mi inglés que deja bastante
que desear, haya entendido cualquier cosa ;).
> > postgres$# IF NOT FOUND THEN
> > postgres$# RETURN valor;
> > postgres$# END IF;
> >
> > Aquí debería devolverme el valor 33 o yo estoy haciendo muy mal?.
>
> No, porque estas haciendo "SELECT INTO valor id" al hacer eso cuando
> no regreso ninguna fila le asigno NULL valor...
Es cierto... hice ese ejemplo para "simplificarlo" y no fué bueno. En realidad
lo que necesito es que si no encuentra, haga una nueva consulta en una nueva
tabla. La función original es la siguiente:
CREATE OR REPLACE FUNCTION "selectCupoActividadPerfil"(integer,integer)
RETURNS int4 AS $$
DECLARE
cupoGral INTEGER;
cupoPart INTEGER;
BEGIN
SELECT INTO cupoGral cupo FROM actividad WHERE id = $1;
IF NOT FOUND THEN
SELECT INTO cupoPart cupo FROM "cupoActividadPerfil" WHERE actividad_id =
$1 AND perfil_id = $2;
RETURN cupoPart;
END IF;
RETURN cupoGral;
END;
$$ LANGUAGE plpgsql IMMUTABLE SECURITY DEFINER;
La ejecuto en psql:
text=# SELECT * FROM "selectCupoActividadPerfil"(4,7);
selectCupoActividadPerfil
---------------------------
(1 row)
test=# SELECT cupo FROM "cupoActividadPerfil" WHERE actividad_id = 4 AND
perfil_id = 7;
cupo
------
0
(1 row)
Osea, yo espero que la función me devuelva cero, no nulo. Perdón si lo estoy
haciendo muy largo. Un gran saludo a todos...
-
-------------------------------------------
Sebastián Villalba
sebastian(at)fcm(dot)unc(dot)edu(dot)ar
-------------------------------------------
From | Date | Subject | |
---|---|---|---|
Next Message | Zulima | 2006-04-19 14:32:19 | Re: Formato Fecha |
Previous Message | WILLIAM PARRA | 2006-04-19 14:02:07 | Re: Es posible un Link entre Oracle y Postgresql? |