Re: Parameters don't work in FETCH NEXT clause? - Mailing list pgsql-hackers

From Shay Rojansky
Subject Re: Parameters don't work in FETCH NEXT clause?
Date
Msg-id CADT4RqBsC1YsX2ByQCDAfRNYFDU=+uBvxxL1X9=+B6=M6es8Rw@mail.gmail.com
Whole thread
In response to Re: Parameters don't work in FETCH NEXT clause?  (Tom Lane <tgl@sss.pgh.pa.us>)
Responses Re: Parameters don't work in FETCH NEXT clause?
List pgsql-hackers
Apologies, as usual I didn't read the docs carefully enough.

On Tue, May 17, 2016 at 7:13 PM, Tom Lane <tgl@sss.pgh.pa.us> wrote:
Shay Rojansky <roji@roji.org> writes:
> A user of mine just raised a strange issue... While it is possible to use a
> parameter in a LIMIT clause, PostgreSQL does not seem to allow using one in
> a FETCH NEXT clause. In other words, while the following works:
> SELECT 1 LIMIT $1;
> The following generates a syntax error:
> SELECT 1 FETCH NEXT $1 ROWS ONLY;
> Since LIMIT and FETCH NEXT are supposed to be equivalent this behavior is
> odd.

Per the SELECT reference page:

    SQL:2008 introduced a different syntax to achieve the same result,
    which PostgreSQL also supports. It is:

        OFFSET start { ROW | ROWS }
        FETCH { FIRST | NEXT } [ count ] { ROW | ROWS } ONLY

    In this syntax, to write anything except a simple integer constant for
    start or count, you must write parentheses around it.

The comments about this in gram.y are informative:

 * Allowing full expressions without parentheses causes various parsing
 * problems with the trailing ROW/ROWS key words.  SQL only calls for
 * constants, so we allow the rest only with parentheses.  If omitted,
 * default to 1.

                        regards, tom lane

pgsql-hackers by date:

Previous
From: Tom Lane
Date:
Subject: Re: Parameters don't work in FETCH NEXT clause?
Next
From: Jaime Casanova
Date:
Subject: Re: 10.0