SOLUCIONADO Como retornar uno o un set de registros desde una funcion plpython
FERNANDO VILLARROEL
fvillarroel en yahoo.com
Lun Abr 3 21:02:33 CEST 2006
Hola Chema gracias, ya consegui retornar registros
desde plpython, te los pego.
El primero es uno que encontre Googleando y el segundo
una adaptacion mia, hazme saber tus comentarios sobre
los mismos.
******** primero ******************
create or replace function rut(int8) returns text as '
rut=args[0]
plan = plpy.prepare("SELECT nombre FROM uno WHERE rut
= $1", [ "int8"
])
rv = plpy.execute(plan, [ rut ])
return "\\n".join([ ln["nombre"] for ln in rv ])
'
LANGUAGE 'plpythonu';
************ segundo *************
create or replace function cli() returns text as '
plan = plpy.prepare("SELECT rut ,nombre FROM uno ")
rv = plpy.execute(plan)
b = []
for i in range(len(rv)):
a=rv[i]
b.append([a["rut"],a["nombre"]])
return b
'
LANGUAGE 'plpythonu';
Ok Chema agradecere tus comentarios.
Fernando Villarroel
--- Chema Cortes <pych3m4 en gmail.com> wrote:
> On 4/2/06, FERNANDO VILLARROEL
> <fvillarroel en yahoo.com> wrote:
> > Hola estuve probando sobre como retornar registros
> > desde una funcion plpython, en particualar la
> > siguiente;
> >
> > create or replace function rut(int8) returns text
> as '
> >
> > rut=args[0]
> >
> > plan = plpy.prepare("SELECT nombre FROM uno WHERE
> rut
> > = $1", [ "int8" ])
> >
> >
> > rv = plpy.execute(plan, [ rut ])
> >
> > return rv
> > '
> > LANGUAGE 'plpythonu';
> >
> > He visto aunque nunca he hecho una, que en las
> > funciones pl/pgsql se debe declarar una variable
> de
> > tipo record y que luego esta variable es la que se
> > retorna, algo asi
> >
> > create function retornar(int4) returns record as '
> >
> > declare reg as record
> >
> > .....
> > return reg
> > '
> > language pl/pgsql;
> >
> > Pero con plpython no se como retornar, aunque ya
> > retorne con el ejemplo anterior un dato de tipo
> > instancia.
>
> El tipo "record" esta pensando para pl/pgsql, no
> para pl/pythonu. En
> python es algo más complejo. Tienes que crear una
> función que devuelva
> un SETOF, guardando la lista/generador en una
> variable global. El
> intérprete de SQL llamará a la función una vez por
> registro que tenga
> que mostrar, terminando cuando la función devuelva
> None (o se halla
> llegado al límite si tenía alguno).
>
> Como inspiración, mírate esta receta mía:
>
> http://www.pythonhispano.org/node/1010
>
> Si no te sale, podría intentar darte un ejemplo más
> completo.
> _______________________________________________
> Python-es mailing list
> Python-es en aditel.org
> http://listas.aditel.org/listinfo/python-es
>
__________________________________________________
Do You Yahoo!?
Tired of spam? Yahoo! Mail has the best spam protection around
http://mail.yahoo.com
Más información sobre la lista de distribución Python-es