From: | Fernando Siguenza <fsigu(at)hotmail(dot)com> |
---|---|
To: | Foro Postgres <pgsql-es-ayuda(at)postgresql(dot)org> |
Subject: | Retornar setof record o cursor |
Date: | 2010-08-10 20:26:12 |
Message-ID: | SNT108-W2103EB98C247EE779726E1A1950@phx.gbl |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-es-ayuda |
Amigos como estan, queria consultarles a ver que me recomienden cual es lamejor forma de retornar varios registros de un procedimiento almacenado.
He revisado y veo que hay como hacer algo como esto (funciones de prueba)
CREATE OR REPLACE FUNCTION pruebas(IN vagecod character varying, IN vfeccorte date, OUT agecod character varying, OUT vcuecod character varying)
RETURNS SETOF record AS
$BODY$
DECLARE
rSaldos record;
BEGIN
for rsaldos in
select *
from cuentas
where cueagecod='010' and cuecod<='2'
loop
....
calculos que necesite el usuario
....
return next;
end loop;
return;
END;
$BODY$
En esta funcion como ven en esta funcion hagoun select en un record, lo recorro a este y hago algunos calculos que necesito para retornar el resultado. Funciona muy bien, pero tambien veo que hay como hacerlo de la siguiente forma
CREATE OR REPLACE FUNCTION prueba1(IN vagecod character varying, IN vfeccorte date,)
RETURNS refcursor AS
$BODY$
DECLARE
cSaldos refcursor;
cResultado refcursor;
BEGIN
create temporary table tmpresultado ( agecod character varying, vcuecod character varying);
open csaldos for select .........
loop
....
calculos que necesite el usuario
....
insert into resultado .....
end loop;
open cresultado for select * from tmpresultado;
return;
END;
$BODY$
Aqui en cambio retorno un cursor el cual lo realizo el select al final procedimiento,
Segun los datos que tengo en este momento las dos funciones trabajan bien y no tienen casi nada de diferencia en cuanto a rendimiento, pero mi consulta es ya con el tiempo cuando los datos vayan creciendo, y van a crecer mucho cual de las dos opciones es la mejor para que el tiempo de respuesta de las consultas no aumente.
En que caso se deberia usar los cursores y en que los record??
Saludos
From | Date | Subject | |
---|---|---|---|
Next Message | Osvaldo Mendoza | 2010-08-10 20:31:03 | Consulta a la Lista |
Previous Message | Mario Soto Cordones | 2010-08-10 20:22:13 | Problema con funcion |