On Fri, 28 Oct 2005, Philip Yarra wrote:

> Just testing pl/pgsql functions in 8.1beta4, I see failures for syntax that
> works in 8.0.3. The simplest test case for this is:

The function below fails for me similarly in 8.0.3 on execution.  8.1
merely tells you at creation time.

Using bar and foo as both parameter names and the field names doesn't
really work.

> create table ptest(foo int, bar varchar(10));
> create or replace function modify_ptest(
>       foo int,
>       bar varchar)
> returns numeric as $$
> declare
>       res numeric;
> begin
>       update ptest
>       set bar = modify_ptest.bar
>       where foo = modify_ptest.foo;
>       res := 0;
> return res;
> end;
> $$ LANGUAGE plpgsql;
>
> The error message from psql is:
>
> ERROR:  syntax error at or near "$1" at character 19
> QUERY:  update ptest set  $1  = modify_ptest.bar where  $2  = modify_ptest.foo
> CONTEXT:  SQL statement in PL/PgSQL function "modify_ptest" near line 7
> LINE 1: update ptest set  $1  = modify_ptest.bar where  $2  = modify...
>                           ^
>
> I assume what I'm trying should still work, though I couldn't find comparable
> examples in the doco. Looks to me like a problem with parameter aliasing.

---------------------------(end of broadcast)---------------------------
TIP 6: explain analyze is your friend

Reply via email to