Saludos Talvez esto tambien les pueda interesar: http://hdsconsultores.net/pgtools/GeneradordeSp%28PG%29.txt
http://hdsconsultores.net/pgtools/Generador%20de%20Sp%27s.sql Hace un tiempo lo hice y lo publique a la lista, talvez les sirva, yo lo utilizo mucho. :: HDS Consultores TI Servidores | Redes | Programacion | GNU/Linux | PostgreSQL Web: http://hdsconsultores.net Blog: http://codigohds.com Linux User #:320363 El 3 de octubre de 2011 18:50, Alejandro Carrillo <faster...@yahoo.es>escribió: 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> <asotolo...@uci.cu> > *Para:* Alejandro Carrillo <faster...@yahoo.es> <faster...@yahoo.es> > *CC:* "pgsql-es-ayuda@postgresql.org" <pgsql-es-ayuda@postgresql.org> > <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> <asotolo...@uci.cu> > *Para:* Alejandro Carrillo <faster...@yahoo.es> <faster...@yahoo.es> > *CC:* "pgsql-es-ayuda@postgresql.org" <pgsql-es-ayuda@postgresql.org> > <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') > > >