hi guys,

i solved this particular issue using the fetch syntax, so thanks for the
tip. I agree with merlin that temp tables are a headache, also because i
can't run the same function again before processing the output;

I am not familiar with arrays, but it seems like a good solution for my
problem, so will definitely study the docs.

cheers
marc


On Wed, Apr 7, 2010 at 3:43 PM, Merlin Moncure <mmonc...@gmail.com> wrote:

> On Tue, Apr 6, 2010 at 9:58 PM, Marc Menem <marc.me...@m4x.org> wrote:
> > Hi all,
> >
> > I'm trying to use a cursor returned by a function from another function.
> But
> > I can't seem to get it working correctly. The error message is:
> >   ERROR:  cursor FOR loop must use a bound cursor variable
> > I am not sure how to bind it;
>
> refcursor handles must be accesed via the fetch mechanism as pavel noted.
>
> the three basic ways to pass sets between pl/pgsql functions are:
> *) cursors
> *) temp tables
> *) arrays
>
> cursors I find to be the most limiting and rarely use.  I just don't
> like the iterative style of coding they push you into.  Also the
> 'fetch' syntax is IMNSHO, completely orthogonal to regular dml and
> stupid (this is not postgres's fault, but the sql language).
>
> temp tables are the most flexible but can also be a headache. you have
> to work around the fact the temp table is not truly a function local
> variable and does not clean up with the function's scope.  temp tables
> also have annoying interactions with the function plan cache.
>
> arrays require a defined type and a fairly new (8.3 minimum) postgres,
> aren't really suitable for anything but fairly small sets (say <=10k
> rows), but can truly be passed around and manipulated as variables,
> and die with the function.  when dealing with problems of this nature,
> I tend to pull the data in chunks, hold in array, and pass around,
> using 8.4 unnest to give me sql dml semantics when I need them.
>
> merlin
>



-- 
Marc

Reply via email to