> -----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