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

 
                                          

Responder a