Re: How return a refcusor using functions???? - Mailing list pgsql-general

From Renê Salomão
Subject Re: How return a refcusor using functions????
Date
Msg-id 20030519121133.32480a86.rene@ibiz.com.br
Whole thread Raw
In response to Re: How return a refcusor using functions????  (frank@chagford.com (Frank Millman))
List pgsql-general
Hi fellows,

 I faced the same problem before... It's hard to come up with this
solution, took me a while to read the documentation and browsing
google... But I managed...

 Try this:

 create or replace function v_ArMaster(refcursor) returns refcursor as '
   declare
    p_cursor AS ALIAS FOR $1;
   begin
     open curs1 for select AccNo, Name, Contact, Phone from ArMaster
 order by AccNo;
     return p_cursor;
   end;'
 language 'plpgsql';

 begin;
  select v_ArMaster('cursor1');
  fetch all from cursor1;
 end;


On 9 May 2003 03:24:13 -0700
frank@chagford.com (Frank Millman) wrote:

> spraveen2001@yahoo.com (Praveen) wrote in message
> news:<98d8ec76.0305020423.951c12f@posting.google.com>...
> > Hi All,
> >
> > How return a ref cursor using function in postgress db. Please can
> > anyone send me sample function? It is very very urgent.
> >
> > Praveen
>
> Hi Praveen
>
> I know part of the answer, but I was about to post my own question in
> this regard, so I hope someone else reads this and can answer my
> question as well.
>
> Here are two alternative methods of defining a function to return a
> refcursor -
>
> 1)
> create or replace function v_ArMaster() returns refcursor as '
>   declare
>     curs1 cursor for select AccNo, Name, Contact, Phone from ArMaster
> order by AccNo;
>   begin
>     open curs1;
>     return curs1;
>   end;'
> language 'plpgsql';
>
> 2)
> create or replace function v_ArMaster() returns refcursor as '
>   declare
>     curs1 refcursor;
>   begin
>     open curs1 for select AccNo, Name, Contact, Phone from ArMaster
> order by AccNo;
>     return curs1;
>   end;'
> language 'plpgsql';
>
> According to my reading of the documentation, they should be
> equivalent. I tested them as follows -
>
> begin;
> select v_ArMaster();
> fetch all from curs1;
> end;
>
> Version 1 works correctly. Version 2 fails with the following error -
>
> NOTICE: PerformPortalFetch: portal "curs1" not found.
>
> Please could someone advise on the correct syntax for version 2. I
> need this because I want to add some if...then...else statements to
> vary the building of the cursor, and you cannot do this inside the
> "declare" section of the function.
>
> Thanks in advance
>
> Frank Millman
>
>
> ---------------------------(end of
> broadcast)--------------------------- TIP 1: subscribe and unsubscribe
> commands go to majordomo@postgresql.org
>

pgsql-general by date:

Previous
From: Jan Wieck
Date:
Subject: Re: Opposite value for RESTRICT in foreign keys?
Next
From: "scott.marlowe"
Date:
Subject: Re: - what protocol for an Internet postgres