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> <mailto:asotolo...@uci.cu>
*Para:* Alejandro Carrillo <faster...@yahoo.es>
<mailto:faster...@yahoo.es>
*CC:* "pgsql-es-ayuda@postgresql.org"
<mailto:pgsql-es-ayuda@postgresql.org>
<pgsql-es-ayuda@postgresql.org> <mailto: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')