> On 22 Jul 2024, at 18:24, Tom Lane <t...@sss.pgh.pa.us> wrote:
> 
> PG Doc comments form <nore...@postgresql.org> writes:
>> The following documentation comment has been logged on the website:
>> Page: https://www.postgresql.org/docs/16/plpgsql-cursors.html
>> Description:
> 
>> The documentation shows this example for the MOVE statement:
> 
>> MOVE FORWARD 2 FROM curs4;
> 
>> According to the docs, this should not work. The count is documented only
>> for the directions ABSOLUTE and RELATIVE (which should be enough). "FORWARD
>> count" and "BACKWARD" count works in MOVE but not in FETCH. I don't know if
>> this is intentional. However, the docs do not seem to be correct for MOVE
>> directions.
> 
> Yeah, you're right.  MOVE does not have the restriction about not
> taking forms of "direction" that specify multiple rows.  But the
> docs just refer you to FETCH which does have that restriction,
> so unless you read that as referring to SQL FETCH it's wrong.
> 
> I also notice this comment in pl_gram.y:
> 
>        /*
>         * Assume it's a count expression with no preceding keyword.
>         * Note: we allow this syntax because core SQL does, but we don't
>         * document it because of the ambiguity with the omitted-direction
>         * case.  For instance, "MOVE n IN c" will fail if n is a variable.
>         * Perhaps this can be improved someday, but it's hardly worth a
>         * lot of work.
>         */
> 
> It seems to me that it'd be better to surface that in the docs,
> that is describe the case as deprecated.
> 
> So maybe something like
> 
>    MOVE repositions a cursor without retrieving any data.
>    MOVE works like the FETCH command, except it only repositions the
>    cursor and does not return the row moved to.
>    The direction clause can be any of the variants allowed in the SQL
>    FETCH command, including those that would fetch more than one row;
>    the cursor is positioned to the last such row.
>    However, the case in which the direction clause is simply a count
>    expression without a keyword is deprecated.  (It is ambiguous with
>    the case where the direction clause is omitted altogether, and
>    hence may fail if the count is not a constant.)
>    As with SELECT INTO,
>    the special variable FOUND can be checked to see whether there was
>    a row to move to.
> 
>                       regards, tom lane

Yes, that's clearer. Especially referring to SQL FETCH instead of FETCH helps. 
Therefore I would change FETCH to SQL FETCH also in your second paragraph.

I read FETCH in the current documentation as PL/pgSQL FETCH and therefore 
checked the list of directions mentioned in the previous chapter.

Thanks, Philipp

Reply via email to