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