Re: [pgsql-es-ayuda] Re: [pgsql-es-ayuda] [OT] Algunas funciones útiles para desarrollo en postgresql

From: Alejandro Carrillo <fasterzip(at)yahoo(dot)es>
To: Anthony <asotolongo(at)uci(dot)cu>
Cc: "pgsql-es-ayuda(at)postgresql(dot)org" <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: Re: [pgsql-es-ayuda] Re: [pgsql-es-ayuda] [OT] Algunas funciones útiles para desarrollo en postgresql
Date: 2011-10-03 22:50:30
Message-ID: 1317682230.77262.YahooMailNeo@web27406.mail.ukl.yahoo.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

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 <asotolongo(at)uci(dot)cu>
Para: Alejandro Carrillo <fasterzip(at)yahoo(dot)es>
CC: "pgsql-es-ayuda(at)postgresql(dot)org" <pgsql-es-ayuda(at)postgresql(dot)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 <asotolongo(at)uci(dot)cu>
>Para: Alejandro
Carrillo <fasterzip(at)yahoo(dot)es>
>CC: "pgsql-es-ayuda(at)postgresql(dot)org" <pgsql-es-ayuda(at)postgresql(dot)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 <asotolongo(at)uci(dot)cu>
>>Para: Alejandro
Carrillo <fasterzip(at)yahoo(dot)es>
>>CC: "pgsql-es-ayuda(at)postgresql(dot)org" <pgsql-es-ayuda(at)postgresql(dot)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')

In response to

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Aldo Amarilla 2011-10-04 12:19:12 Consulta sobre postgres 8.4
Previous Message Anthony 2011-10-03 21:49:28 Re: [pgsql-es-ayuda] Re: [pgsql-es-ayuda] [OT] Algunas funciones útiles para desarrollo en postgresql