Re: Find out the number of rows returned by refcursor?

From: "Karen Hill" <karen_hill22(at)yahoo(dot)com>
To: pgsql-general(at)postgresql(dot)org
Subject: Re: Find out the number of rows returned by refcursor?
Date: 2006-10-12 17:48:51
Message-ID: 1160675331.776500.255930@m73g2000cwd.googlegroups.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general

Karen Hill wrote:
> Tom Lane wrote:
> > "Karen Hill" <karen_hill22(at)yahoo(dot)com> writes:
> > > -- Is there a way to know the total number of rows the cursor is
> > > capable of traversing without using --count?
> >
> > If you want an accurate count, the only way is to traverse the cursor.
> > Consider using MOVE FORWARD ALL and noting the rowcount, then MOVE
> > BACKWARD ALL to reset the cursor (the latter at least should be
> > reasonably cheap).
> >
>
> Cool. Quick question, how does one go about noting the rowcount?
> Using the rowcount in get diagnostics or something else?
>

A "MOVE FORWARD ALL FROM cur;" statement returns "MOVE x". Where x is
the number moved. The result seems to be of a NOTICE type, and I'm not
sure how I can pass that as a result from a pgsql function.

I guess what I'm looking for is this, if it is possible:

CREATE OR REPLACE FUNCTION FOOBAR(refcursor , out refcursor , out
total int4) AS '
BEGIN

OPEN $1 FOR SELECT * FROM t_table ORDER by c_column DESC;
total := (MOVE FORWARD ALL FROM $1);
MOVE BACKWARD ALL FROM $1;
$2 := $1;

END;
' LANGUAGE plpgsql;

Thanks in advance.

Also, is this possible? I would like to be able to plug in the name of
the refcursor returned by the above stored procedure and be able to
fetch data:

CREATE OR REPLACE FUNCTION MOVE(refcursor) RETURNS ROWTYPE AS '
BEGIN
FETCH FORWARD 20 FROM $1;
END;
' LANGUAGE plpgsql;

regards,
karen.

In response to

Responses

Browse pgsql-general by date

  From Date Subject
Next Message Tom Lane 2006-10-12 18:14:49 Re: Find out the number of rows returned by refcursor?
Previous Message Tim Tassonis 2006-10-12 17:40:42 Re: more anti-postgresql FUD