> -----Mensaje original-----
> De: [EMAIL PROTECTED] 
> [mailto:[EMAIL PROTECTED] En nombre de 
> Fernando Siguenza
>  
> como hago para recorrer y manipular un refcursor, tengo algo como esto
>  
> CREATE OR REPLACE FUNCTION prueba(agencia varchar) RETURNS 
> refcursor AS $$ DECLARE  cMayor refcursor;
>  
> BEGIN
>   open cMayor for 
>      select 
> asicab.asiagecod,asicab.asifec,asicab.asidoc,asicab.asinum,0.0
> 0000 as saldo  from asicab;
>      aqui como hago para recorrer el refcursor y cambiar el 
> valor de la columna saldo por algun valor
>      RETURN NEXT cMayor;
> END;
> $$
> LANGUAGE 'plpgsql';
>  

Me da la impresión que en la forma que lo estas planteando harás un doble
trabajo de recorrer los comprobantes primero en la función en la base y
luego en la aplicación.

¿No será mejor que el saldo lo calcule la aplicación que de todas maneras
recibirá y recorrerá los registros (para mostrarlos en una grilla o
similar)?

De todas maneras se puede hacer. Perdón, pero insistiré con la creación de
un tipo de datosdonde esté el saldo. :)
Sería algo así como:  --Código NO probado--

create type t_mayor as (
  asiagecod asicab.asiagecod%TYPE,
  asifec    asicab.asifec%TYPE,
  asidoc    asicab.asidoc%TYPE,
  asinum    asicab.asinum%TYPE,
  saldo     numeric(10,4)
);

CREATE OR REPLACE FUNCTION ObtenerMayor(p_agencia text) RETURNS SETOF
t_mayor AS
$BODY$
DECLARE
  mayor t_mayor;
  saldo_acum numeric(10,4);

BEGIN
  saldo_acum := 0;
  FOR mayor IN 
    select asicab.asiagecod,asicab.asifec,asicab.asidoc,asicab.asinum, 0.0
      from asicab
     where asicab.asiagecod = p_agencia
     order by asifec
  LOOP
     -- Calculo saldo
     saldo_acum := saldo_acum + mayor.saldo;
     RETURN NEXT mayor;
  END LOOP;
  RETURN;
END;
$BODY$
LANGUAGE 'plpgsql' ;

¿Te sirve?

--
TIP 3: Si encontraste la respuesta a tu problema, publícala, otros te lo 
agradecerán

Responder a