RE: Recorrer un Refcursor

From: "Fernando Hevia" <fhevia(at)ip-tel(dot)com(dot)ar>
To: "'Fernando Siguenza'" <fsigu(at)hotmail(dot)com>, "'Foro Postgres'" <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: RE: Recorrer un Refcursor
Date: 2008-11-26 14:30:45
Message-ID: 24766545C43E4BFAA70847A6D1381FB4@iptel.com.ar
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

> -----Mensaje original-----
> De: pgsql-es-ayuda-owner(at)postgresql(dot)org
> [mailto:pgsql-es-ayuda-owner(at)postgresql(dot)org] 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?

In response to

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Fernando Siguenza 2008-11-26 14:44:40 RE: Recorrer un Refcursor
Previous Message Cristian Carrasco 2008-11-26 14:23:54 RE: unicode xml