Re: Llamadas recursivas en funciones de Base de Datos

From: Emanuel Calvo Franco <postgres(dot)arg(at)gmail(dot)com>
To: Gustavo Vaccaro <gustavo_vaccaro(at)fibertel(dot)com(dot)ar>
Cc: arpug(at)postgresql(dot)org
Subject: Re: Llamadas recursivas en funciones de Base de Datos
Date: 2011-02-10 16:06:51
Message-ID: AANLkTimngcbckwzJ2R2BNUxtCkREbumAHLhz0K4azY5E@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: arpug

El día 10 de febrero de 2011 15:06, Gustavo Vaccaro
<gustavo_vaccaro(at)fibertel(dot)com(dot)ar> escribió:
> Hola,
> tengo una funcion (fn_acumuxcuenta) en postgres 8.4 que hace una llamada
> recursiva a si misma.
>
> *** FUNCION fn_acumuxcuenta *****
> declare c_monto decimal(15,2);
> declare c_ctamadre scroll cursor for select id_cuenta from
> plancta where id_nroemp = arg_nroemp and id_ctamadre = arg_cuenta and
> id_cuenta <> id_ctamadre order by id_cuenta asc;
> BEGIN
> .....
> *** mas codigo ****
> .....
> linea 23:    open c_ctamadre;
>                   loop
>                   fetch next from c_ctamadre into s_cuenta;
>                   if not found then
>                      exit;
>                   end if;
> linea 29:
>  c_monto=c_monto+fn_acumuxcuenta(arg_nroemp,arg_nroserie,s_cuenta,arg_fecdes,arg_fechas,arg_dh);
>                   end loop;
>                   close c_ctamadre;
>
>                   return(c_monto);
> END
>
> Esta funcion la utilizo en una vista para que me devuelva el monto total
> acumulado.
> Cuando ejecuto la vista me tira el siguiente error:
>
>
> ERROR:  el cursor «c_ctamadre» ya está en uso
> CONTEXT:  función PL/pgSQL «fn_acumuxcuenta» en la línea 23 en OPEN
> función PL/pgSQL «fn_acumuxcuenta» en la línea 29 en asignación
>
> ********** Error **********
>
> ERROR: el cursor «c_ctamadre» ya está en uso
> Estado SQL:42P03
> Contexto:función PL/pgSQL «fn_acumuxcuenta» en la línea 23 en OPEN
> función PL/pgSQL «fn_acumuxcuenta» en la línea 29 en asignación
>
> Agradeceria alguna ayuda para intentar solucionar el problema.
>
> La funcion proviene de una migracion de Sybase Adaptive Server Anywhere y la
> recusividad funcionaba perfecto.
>

Pero ambas bases funcionan totalmente distintas respecto al manejo de cursores.

Podrías pegar más detalles del código? Quizás se pueda implementar de
otra manera....

--
--
              Emanuel Calvo
                   DBA

In response to

Responses

Browse arpug by date

  From Date Subject
Next Message Gustavo Vaccaro 2011-02-11 11:25:13 Re: Llamadas recursivas en funciones de Base de Datos
Previous Message Gustavo Vaccaro 2011-02-10 14:17:00 Llamadas recursivas en funciones de Base de Datos