RE: Recorrer un Refcursor

From: Fernando Siguenza <fsigu(at)hotmail(dot)com>
To: <fhevia(at)ip-tel(dot)com(dot)ar>, Foro Postgres <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: RE: Recorrer un Refcursor
Date: 2008-11-26 14:44:40
Message-ID: BAY121-W346B9740F6F2F12DE3E37CA10A0@phx.gbl
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda


me sirve muchisimo amigo, pero lo que estoy es queriendo evitar la
creacion de tipos porque le veo medio engorroso "mi punto de vista", el
tener que estar creando un tipo para cada funcion que me returne un
select de varias tablas y que necesite manipular este select, si algun
momento tengo que cambiar la funcion tengo que estar primelo eliminando
el tipo, luego la funcion y de ahi vilver a crear el tipo y la funcion,
entonces me queria evitar eso, pero justo estoy en eso no se como
hacerlo...

Aunque estoy abierto a sugerencias, de como seria la mejor forma de hacer,

No hago los calculos en la aplicacion, porque necesito hacer primero un
select del saldo anterio, y esto lo haria en la misma funcion, o sino
me tocaria hacer dos accesos a la base de datos, uno para tener el
saldo anterior, otro lara el select, y de ahi recien barrerme, mientras
que me paracemejor hacer todo en el server.....

> From: fhevia(at)ip-tel(dot)com(dot)ar
> To: fsigu(at)hotmail(dot)com; pgsql-es-ayuda(at)postgresql(dot)org
> Subject: RE: [pgsql-es-ayuda] Recorrer un Refcursor
> Date: Wed, 26 Nov 2008 12:30:45 -0200
>
>
>
> > -----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?
>

_________________________________________________________________
Color coding for safety: Windows Live Hotmail alerts you to suspicious email.
http://windowslive.com/Explore/Hotmail?ocid=TXT_TAGLM_WL_hotmail_acq_safety_112008

In response to

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Gabriel Hermes Colina Zambra 2008-11-26 14:47:09 RE: Recorrer un Refcursor
Previous Message Fernando Hevia 2008-11-26 14:30:45 RE: Recorrer un Refcursor