Re: Procedimientos en PlpgSQL

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"

In response to

Browse pgsql-es-ayuda by date

  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