Retornar setof record o cursor

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


Responses

Browse pgsql-es-ayuda by date

  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