Asi no es, simplemente es usando un parametro de entrada de tipo refcursor, luego abres ese cursor con open y listo. Esa funcion no deberia devolver nada (void) y para mostrar los datos usa un fetch all in 'cur' despues de haber ejecutado la funcion.
________________________________ De: Anthony <asotolo...@uci.cu> Para: Alejandro Carrillo <faster...@yahoo.es> CC: "pgsql-es-ayuda@postgresql.org" <pgsql-es-ayuda@postgresql.org> Enviado: lunes 3 de octubre de 2011 16:49 Asunto: Re: [pgsql-es-ayuda] Re: [pgsql-es-ayuda] [OT] Algunas funciones útiles para desarrollo en postgresql El 03/10/2011 17:29, Alejandro Carrillo escribió: Para insert, update y delete es más rapido como le comenté (sin EXECUTE consulta) >Para el select de la tabla tiene 3 opciones: >1) usar un parámetro refcursor en la funcion de la tabla y mostrar el resultado de ese parametro usando un FETCH ALL IN CURSORNUEVO (recomiendo esta ya que se presta para cuando se cambie la estructura de la tabla, no hay que cambiar el uso de la funcion y puede devolver varias cursores dependiendo de los valores de entrada) > >2) crear una function que devuelva un setof record y tener el mismo numero y tipo de parametros de salida que el numero y tipo de datos de los campos a mostrar. Más info ver: http://www.postgresonline.com/journal/archives/201-returns-table.html > >3) retornar un tipo table (que a la larga es lo mismo que el punto anterior, toca ver cual es más veloz) > >Para EL SELECT GENERAL falta explicarlo como se debe ejecutar (un ejemplo como el que le habia comentado). > > > > >________________________________ >De: Anthony <asotolo...@uci.cu> >Para: Alejandro Carrillo <faster...@yahoo.es> >CC: "pgsql-es-ayuda@postgresql.org" <pgsql-es-ayuda@postgresql.org> >Enviado: lunes 3 de octubre de 2011 16:15 >Asunto: Re: [pgsql-es-ayuda] Re: [pgsql-es-ayuda] [OT] Algunas funciones útiles para desarrollo en postgresql > > >El 03/10/2011 11:38, Alejandro Carrillo escribió: >Hola >> >> >>Ya le eché la revisada. >>Que me gusto: >>1) La aplicación no tiene lio a la hora de instalarse, solo descomprimir y ya. >>2) Efectivamente hace su trabajo de crear las funciones. >> >> >> >>Que no me gusto: >>1) Sentencias como RETURN QUERY EXECUTE son lentas a la hora de ejecutarse y estas sentencias solo deben ejecutarse en casos donde no se sepa como va a llegar la sentencia. Además se suelen prestar para ejecutar inyecciones SQL. En mi concepto personal, prefiero las sentencias hechas a la medida y que se vayan modificando a medida de las necesidades.Ej: >>consulta:='insert into public.dato (iddato,nombredato,fecha,edad) values (' || $1 || ')' ; >>EXECUTE consulta; >> >>esta sentencia se ejecutará más lento que una función donde tome los parametros y los inserte sin usar execute. >> >>2) En el manual no dice como usar las funciones, en especial la funcion de Select_general. >>La de select_general debe usarse asi: >>select * from public.select_general('select * from dato where 1=1') as tt (p_iddato integer, p_nombredato character varying, p_fecha date, p_edad numeric); >> >> >> >>________________________________ >>De: Anthony <asotolo...@uci.cu> >>Para: Alejandro Carrillo <faster...@yahoo.es> >>CC: "pgsql-es-ayuda@postgresql.org" <pgsql-es-ayuda@postgresql.org> >>Enviado: viernes 5 de abril de 2002 16:11 >>Asunto: [pgsql-es-ayuda] Re: [pgsql-es-ayuda] [OT] Algunas funciones útiles para desarrollo en postgresql >> >> >>On 03/10/11 09:41, Alejandro Carrillo wrote: >>http://code.google.com/p/generadorprocparapostgresql/ >>> >>>Es un generador de procedimientos almacenados para postgresql. FUE TOMADO DE otro proyecto q estaba abandonado llamado pgp-generator. Me pareció buena la idea y para no dejarlo morir creé este proyecto. >>>Contiene soporte para la creación de insert, delete, update y select, solo debe escribir el nombre de ls funcion, el esquema y la tabla y este se encarga de generar el procedimiento almacenado de la fucnion solicitada(insert,delete,update,select) >>> >>>http://code.google.com/p/datageneratorpostgresql/ >>> >>>Es un generador de datos para tablas en postgresql. Le crea datos con el fin de probar velocidad en consultas, actualizaciones y borrados de datos en una tabla. Solo debe: 1) Crear el lenguaje plpgsql 2) Crear el schema utils para que estas funciones queden depositadas en ese schema 3) Pasar el nombre del schema, la tabla, numero de registros a insertar/generar y el numero en ascii inicial y final (ej: espacio es el nro ascii 32, comilla simple es 34) EJ: select utils.creardatostabla('public','clientes',50,32,78) 4) Disfrútalo y recomiendalo a tus amigos >>>Posdata: Puede insertar registros con caracteres especiales como comilla simple('), doble(") y barra invertida "\", lo cual lo hace muy bueno a la hora de experimentar con campos especiales >>> >>> >>> >>>2 proyectos de su humilde servidor. >>> >>> >>>¿Opiniones, sugerencias, correcciones? >>> Hola algo como lo primero que pones tenemos algo por aca desarrollado en su version inicial (CRUD-PG) , aunque hemos organizado algunas ideas que pretendemos poner en el futuro para mejorarlo, pero este esta funcional si deseas conocerlo esta aqui >>http://postgresql.uci.cu/node/74 >> >>y el link de descarga: >>http://postgresql.uci.cu/descargas/tools/CRUD-PG%201.1.tar.bz2 >> >>saludos >> >>PD: el segundo que envias tampoco lo conocia , pero me interesa utilizarlos gracias. >> >> >> me alegro que tengas aspectos que le guste tendré en cuenta sus sugerencias, pero es que utilizo el ejemplo que usted me sugiere para ejecutar las sentencias(insert, update y delete) Ej:consulta:='insert into public.dato (iddato,nombredato,fecha,edad) values (' || $1 || ')' ; EXECUTE consulta; > >pero para consultas select que me interesa el resultado tengo que ejecutarlos con RETURN QUERY EXECUTE pues es la única forma que conozco, al menos yo, de ejecutar conusltas dinámicas formadas por concatenacion de cadenas y pueden variar , entiendo que son un poco lentas si las ejecuto asi pero bueno, si desea coolaborar con la solucion , son bienvenidos sus sugerencias, hace tiempo que no le hago nada. >saludos y gracias!!! > > > Ok , Gracias!!!! a todos miren este ejemplo usando cursores pero de otro modo al que me dicen que es como los entiendo y diganme si lo recomiendan?: CREATE OR REPLACE FUNCTION cliente_select_condicional_cursor(condicional text) RETURNS SETOF cliente AS $BODY$ DECLARE resultado public."cliente" ; consulta text ; micursor refcursor; begin open micursor for execute 'select * from public."cliente" where ' || $1; loop fetch micursor into resultado; exit when not found; return next resultado; end loop; return; end; $BODY$ LANGUAGE plpgsql VOLATILE despues llamo la funcion: select * from cliente_select_condicional_cursor('id=1')