Re: Find out the number of rows returned by refcursor? - Mailing list pgsql-general

From Karen Hill
Subject Re: Find out the number of rows returned by refcursor?
Date
Msg-id 1160675331.776500.255930@m73g2000cwd.googlegroups.com
Whole thread Raw
In response to Find out the number of rows returned by refcursor?  ("Karen Hill" <karen_hill22@yahoo.com>)
Responses Re: Find out the number of rows returned by refcursor?  (Tom Lane <tgl@sss.pgh.pa.us>)
List pgsql-general
Karen Hill wrote:
> Tom Lane wrote:
> > "Karen Hill" <karen_hill22@yahoo.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.


pgsql-general by date:

Previous
From: Tim Tassonis
Date:
Subject: Re: more anti-postgresql FUD
Next
From: Tom Lane
Date:
Subject: Re: Find out the number of rows returned by refcursor?