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
>
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? |