| 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: | Whole Thread | Raw Message | 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.
| 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 |