Re: use cursor in a function

Поиск
Список
Период
Сортировка
От Rory Campbell-Lange
Тема Re: use cursor in a function
Дата
Msg-id 20030617123421.GC6349@campbell-lange.net
обсуждение исходный текст
Ответ на Re: use cursor in a function  (Joe Conway <mail@joeconway.com>)
Список pgsql-novice
On 17/06/03, Joe Conway (mail@joeconway.com) wrote:
> Rory Campbell-Lange wrote:
> >Is this sensible, efficient, feasible? I have not used cursors before.
> >
> >Or should I simply do 2 separate functions, 1 for NUM_ROWS, the
> >other for the result set I want?
>
> It's hard to offer advice (at least for me) without more context. What
> are you trying to accomplish (in more detail), and in what type of
> application (web, fat client, etc)?

Its a web page <page> of <pages> scenario.

I need to find the total number of rows returned by a specific WHERE,
and turn that into <pages>.

I also need to return a set of rows, using LIMIT and OFFSET to grab a
subset of the rows and return these to the client.

I wondered if I could do this with one call rather than two. My complete
ignorance of how to use cursors is demonstrated in my second imaginary
example! I realise I can do more or less what I want in a single query
by using a LEFT OUTER JOIN to count(n_id) on a duplicate WHERE query.

Just wondered if cursors provide a cleaner looking query to do that.

Thanks!
Rory

Instead of going (psuedocode):

    SELECT into record
        n_id
    FROM
        table
    WHERE
        complex_where;

    numrows := NUMROWS;

    FOR resulter IN
            numrows, this, that, tother
        FROM
            table
        WHERE
            complex_where
        LIMIT
            limit
        OFFSET
            offset
        LOOP

            return next resulter;

    END LOOP;

I imagine going:

       OPEN mycursor FOR
        SELECT
            this, that, tother
        FROM
            table
        WHERE
            complex_where;

        numrows := mycursor->NUMROWS (!);
        cursor_move(offset);
        cursor_get(limit);

        somehow get cursor values into a RECORD...







--
Rory Campbell-Lange
<rory@campbell-lange.net>
<www.campbell-lange.net>

В списке pgsql-novice по дате отправления:

Предыдущее
От: "Brent Howard"
Дата:
Сообщение: Issues starting postgres on Solaris
Следующее
От: Harry Broomhall
Дата:
Сообщение: Commit within a PL/PGSQL procedure