David Wheeler wrote:
> Hellow PostgreSQL hackers,
> 
> Quick question. Why does the 'i = i + 1' syntax work in this PL/pgSQL 
> function?
> 
> try=# CREATE OR REPLACE FUNCTION inc_by_two(
> try(#    upfrom int,
> try(#    upto   int
> try(# ) RETURNS SETOF INT AS $$
> try$# BEGIN
> try$#     FOR i IN upfrom..upto LOOP
> try$#         RETURN NEXT i;
> try$#         i = i + 1;
> try$#     END LOOP;
> try$# END;
> try$# $$ LANGUAGE 'plpgsql';
> CREATE FUNCTION
> try=# select * from inc_by_two(1,10);
> inc_by_two
> ------------
>           1
>           3
>           5
>           7
>           9
> (5 rows)
> 
> Someone posted a PL/pgSQL function in my blog with this syntax, which 
> is how I know about it, but I couldn't find it documented anywhere.  Is
> it a special exception for loop variables, perhaps?
> 
> Thanks,
> 
> David
> 
> ---------------------------(end of broadcast)---------------------------
> TIP 2: Don't 'kill -9' the postmaster
> 

The syntax for assignment is:

  i := i + 1

what you are doing is merely comparison.  Since you are not using the results of
the comparison, it is a no-op.

mark

---------------------------(end of broadcast)---------------------------
TIP 9: In versions below 8.0, the planner will ignore your desire to
       choose an index scan if your joining column's datatypes do not
       match

Reply via email to