From: | Alvaro Herrera <alvherre(at)surnet(dot)cl> |
---|---|
To: | dkuroki(at)dbas(dot)com(dot)ar |
Cc: | askertchly(at)dacompsc(dot)com, pgsql-es-ayuda(at)postgresql(dot)org |
Subject: | Re: Procedimientos en PlpgSQL |
Date: | 2005-06-15 15:58:41 |
Message-ID: | 20050615155841.GG9860@surnet.cl |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-es-ayuda |
On Mon, Jun 13, 2005 at 03:20:07PM -0000, dkuroki(at)dbas(dot)com(dot)ar wrote:
> Las funciones pueden anidarse pero no usando variables publicas. Es
> decir, no existe el concepto de variable global ( por lo menos en
> pl/pgsql , creo que en algun otro lenguaje si )
Ojo con lo de que pueden anidarse -- es cierto que se pueden invocar
funciones desde dentro de otras funciones. Tambien es cierto que puedes
poner bloques (BEGIN; END;) dentro de otros bloques en PL/pgSQL. Pero
en PL/pgSQL _no_ se puede declarar funciones dentro de otras funciones
como en Pascal, es decir, funciones que son visibles solo dentro de la
funcion donde se declara. Tampoco se puede, en PL/pgSQL, declarar
bloques anonimos de codigo que actuen como clausura sobre variables
declaradas en ellas, como en lenguajes de otras clases (Lisp, ML, etc).
(Excepto definiendo strings literales que despues ejecutas con EXECUTE
-- pero eso no puede actuar como clausura, es solo un string).
Pero nota que eso se aplica solo a PL/pgSQL. Se pueden escribir
funciones en otros lenguajes, por ej. PL/Perl. En Perl _si_ puedes
definir clausuras (trozos anonimos de codigo). Se puede manejar en
PL/Perl, aunque es engorroso y no se si lo recomendaria :-) (No lo he
intentado usar tampoco -- y observa ademas, que cada funcion PL/Perl es
en si misma una rutina anonima desde el punto de vista de Perl).
Por otro lado, si hay mucho interes en poder hacer esto, lo que se puede
hacer es definir un nuevo manejador de lenguaje, que te permita
escribir funciones en ese lenguaje. Por ej. ya hay para Java, Python,
Perl, R ... Si escribieras uno para Lisp, Scheme o OCaml estoy mas que
seguro que hay mucha gente que te lo agradeceria mucho.
--
Alvaro Herrera (<alvherre[a]surnet.cl>)
"La gente vulgar solo piensa en pasar el tiempo;
el que tiene talento, en aprovecharlo"
From | Date | Subject | |
---|---|---|---|
Next Message | cristianrosselm | 2005-06-15 15:59:11 | Re: Hola buenos Dias |
Previous Message | Alvaro Herrera | 2005-06-15 15:51:18 | Re: baja en la lista |