Re: Crear y usar funciones

From: Alvaro Herrera <alvherre(at)dcc(dot)uchile(dot)cl>
To: Damian Culotta <dculotta(at)fibertel(dot)com(dot)ar>
Cc: Ayuda PostgreSql <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: Re: Crear y usar funciones
Date: 2005-04-05 02:43:27
Message-ID: 20050405024327.GA19425@dcc.uchile.cl
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

On Mon, Apr 04, 2005 at 02:47:15PM -0300, Damian Culotta wrote:

Hola,

> En vez de utilizar los strings sql completos en el código, entiendo
> que puedo hacerlo con una función. Es decir, que el string sql este en
> una función a la cual invoco desde el código y esta función me develve
> los resultados que luego manipularé como necesite. No estoy seguro si
> conceptualmente estoy en lo correcto, pero espero que puedan echar luz
> sobre el tema.

Claro, tienes varias maneras de hacerlo. Puedes crear vistas, o puedes
usar procedimientos almacenados:

Si tu consulta original fuera: select * from a join b on a.foo = b.bar
entonces podrias hacer

create view foo as select * from a join b on a.foo = b.bar

y luego en tu codigo simplemente harias

select * from foo

O bien, podrias hacer
create function foo () returns setof record language sql as $$
select * from a join b on a.foo = b.bar
$$;

y luego en el codigo

select * from foo() as f(foo int, baz text, bar int, kux text);

O bien
create type foo_t as (foo int, baz text, bar int, kux text);
create function foo_with_t () returns setof foo_t language sql as $$
select * from a join b on a.foo = b.bar
$$;

y luego en el codigo
select * from foo_with_t();

Estos ultimos conceptos (funciones que retornan los conjuntos que te
interesan) son muy poderosos; puedes ir bastante mas alla de lo que te
ofrece el SQL "de vainilla" y aplicar toda suerte de preprocesamiento
usando variados lenguajes; partiendo por SQL, que te sirve para
simplificar el acceso del lado del cliente almacenando mucha de la
logica del lado del servidor; pasando por PL/pgSQL, que te entrega
ademas de lo de SQL, la potencialidad de hacer cosas proceduralmente
(loops, asignaciones, manejo rudimentario de excepciones); hasta cosas
como PL/Perl, PL/Python, PL/PHP, PL/Java; y cuando ya tus requerimientos
de potencia, rendimiento e inmiscuirte en las entrañas del servidor ;-)
son muy altos, puedes escribir funciones en C. Se me olvidaba mencionar
que si quieres procesamiento numerico, hacer graficos, calcular
estadisticos de toda clase, etc, puedes usar PL/R.

Ojala te sirva. Suerte,

--
Alvaro Herrera (<alvherre[(at)]dcc(dot)uchile(dot)cl>)
"I personally became interested in Linux while I was dating an English major
who wouldn't know an operating system if it walked up and bit him."
(Val Henson)

In response to

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message emillio alvarez 2005-04-05 11:59:04 problema con un select y un distinct
Previous Message Alvaro Herrera 2005-04-05 00:21:40 Re: Problema de configuracion Local