Re: context in plpgsql functions - Mailing list pgsql-general

From elein
Subject Re: context in plpgsql functions
Date
Msg-id 200305312146.07295.elein@varlena.com
Whole thread Raw
In response to Re: context in plpgsql functions  (Gianni Mariani <gianni@mariani.ws>)
List pgsql-general
You can do this in a C function or a plpython function
by saving out the information into context in C or
into the SD[] dictionary in plpython.

This is the subject of my talk at OSCON :-)

elein


On Saturday 17 May 2003 08:50, Gianni Mariani wrote:
> Gianni Mariani wrote:
>
> > Jeff Eckermann wrote:
> >
> >> --- Ian Barwick <barwick@gmx.net> wrote:
> >>
> >>
> >>> On Friday 16 May 2003 20:46, Gianni Mariani wrote:
> >>>
> >>>
> >>>> I've been using PostgreSQL 7.3.2.
> >>>>
> >>>> What, if any, way is there to share a context
> >>>>
> >>>
> >>> (global rowtype variable)
> >>>
> >>>
> >>>> between plpgsql functions ?
> >>>>
> >>>
> >>> If you mean something like Oracle's PL/SQL packages,
> >>> which can
> >>> contain package global variables, then unfortunately
> >>> not.
> >>>
> >>
> >>
> >> I believe the usual workaround is to insert the values
> >> in a table which has been created for that purpose.
> >>
> >>
> > Yes - I was thinking of that - I was also thinking you could use a
> > cursor to do the job of pointing to the record in the table you care
> > about.
> >
> > However, when I try to do a MOVE cursor inside a plpgsql function i get :
> >
> >    EXECUTE ''MOVE BACKWARD 1 IN "ContextCursor"''
> >
> >    psql:kkk4:145: ERROR:  unexpected error -5 in EXECUTE of query
> > 'MOVE BACKWARD 1 IN "ContextCursor"'
> >
> > or a
> >      PERFORM MOVE BACKWARD 1 IN "ContextCursor";
> >
> >    psql:kkk4:145: ERROR:  parser: parse error at or near "BACKWARD" at
> > character 14
> >
> > or
> >
> >    MOVE BACKWARD 1 IN "ContextCursor";
> >
> >    psql:kkk4:145: ERROR:  SPI_prepare() failed on "MOVE BACKWARD 1 IN
> > "ContextCursor""
> >
> >
> > .... yet that same statement works fine elsewhere ...
> >
> > Ideas on how to move a cursor inside a plpgsql function ?
>
> OK - this one works.
>
> CREATE FUNCTION MoveBack() RETURNS unknown AS '
>     MOVE BACKWARD 1 FROM "ContextCursor";
>     select ''A'';
> ' LANGUAGE SQL;
>
> ... then in the plpgsql function do this:
>
>     PERFORM MoveBack();
>
> It seems like there is a few issues with cursors and plpgsql functions.
> Does anyone want some test cases ?
>
> So it seems like it is possible to create a somewhat simple context
> handler using cursors.  It's also good that with cursors by default
> there is a scope by default in a transaction (the 7.4 doc seems to
> suggest that you can declare cursors that live beyond a transaction).
>
> Having said all that, it would be good if you could define a "class" of
> plpgsql functions that could share contextual information implicitly.
>
>
>
>
>
>
> ---------------------------(end of broadcast)---------------------------
> TIP 5: Have you checked our extensive FAQ?
>
> http://www.postgresql.org/docs/faqs/FAQ.html
>
>

--
=============================================================
elein@varlena.com     Database Consulting     www.varlena.com
PostgreSQL General Bits    http:/www.varlena.com/GeneralBits/
   "Free your mind the rest will follow" -- en vogue


pgsql-general by date:

Previous
From: Bruce Momjian
Date:
Subject: Re: qsort (was Re: Solaris)
Next
From: "Guillaume Houssay"
Date:
Subject: Table data type modification