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