On 24 November 2011 14:12, Alban Hertroys <haramrae@xxxxxxxxx> wrote:
On 24 November 2011 14:52, Gavin Casey <gpjcasey@xxxxxxxxxxxxxx> wrote:I would expect an error here, as having an _expression_ without a
> This works in 9.1.1 but seems like a bug to me:
>
> create function xout(_x INTEGER)
> returns integer
> as $$
> begin
> _x = _x * 2;
context (an if-statement, for example) should be illegal.
An assignment should be fine though:
_x := _x * 2;I'm guessing people make errors like this frequently enough that the
parser was relaxed to accept this _expression_ as an assignment, even
though the syntax for those is slightly different. There is no other
possible explanation for such a line, after all, the author of this
code clearly meant to put an assignment there.
What is the output? I'm guessing it's 8, since there was no syntax
> return _x;
> end;
> $$ LANGUAGE plpgsql;
>
> select xout(4);
error. That would be the right answer too, in that case.
Function-local variables don't matter outside the function, after all.
--
If you can't see the forest for the trees,
Cut the trees and you'll see there is no forest.
It was actually the reassignment of an IN parameter that I was questioning,
the '=' sign on it's own was my typo, apologies for confusion.