Re: How return a refcusor using functions????

From: Renê Salomão <rene(at)ibiz(dot)com(dot)br>
To: frank(at)chagford(dot)com (Frank Millman), spraveen2001(at)yahoo(dot)com
Cc: pgsql-general(at)postgresql(dot)org
Subject: Re: How return a refcusor using functions????
Date: 2003-05-19 15:11:33
Message-ID: 20030519121133.32480a86.rene@ibiz.com.br
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: 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(at)chagford(dot)com (Frank Millman) wrote:

> spraveen2001(at)yahoo(dot)com (Praveen) wrote in message
> news:<98d8ec76(dot)0305020423(dot)951c12f(at)posting(dot)google(dot)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(at)postgresql(dot)org
>

In response to

Browse pgsql-general by date

  From Date Subject
Next Message scott.marlowe 2003-05-19 15:23:19 Re: PostgreSQL Performance on OpenBSD
Previous Message Abdul-wahid Paterson 2003-05-19 15:08:13 foreach statment?