Hello,

this is solved in new PostgreSQL 9.0

postgres=# create table test_table(id int);
CREATE TABLE
postgres=# CREATE OR REPLACE FUNCTION select_test()
postgres-#
postgres-#   RETURNS void AS
postgres-#
postgres-# $BODY$
postgres$#
postgres$# DECLARE
postgres$#
postgres$# id integer = -1;
postgres$#
postgres$# BEGIN
postgres$#
postgres$# select max(id) into id from test_table;
postgres$#
postgres$# END
postgres$#
postgres$# $BODY$
postgres-#
postgres-#   LANGUAGE 'plpgsql' VOLATILE
postgres-#
postgres-#   COST 100;
CREATE FUNCTION
postgres=# select select_test();
ERROR:  column reference "id" is ambiguous
LINE 1: select max(id)         from test_table
                   ^
DETAIL:  It could refer to either a PL/pgSQL variable or a table column.
QUERY:  select max(id)         from test_table
CONTEXT:  PL/pgSQL function "select_test" line 8 at SQL statement
postgres=#

Regards
Pavel Stehule



2010/7/20  <depst...@alliedtesting.com>:
> PostgreSQL 8.4
>
>
>
> Here is a PL/pgSQL procedure:
>
>
>
> CREATE OR REPLACE FUNCTION select_test()
>
>   RETURNS void AS
>
> $BODY$
>
> DECLARE
>
> id integer = -1;
>
> BEGIN
>
> select max(id) into id from test_table;
>
> END
>
> $BODY$
>
>   LANGUAGE 'plpgsql' VOLATILE
>
>   COST 100;
>
>
>
> test_table is some table with an integer column ‘id’.
>
>
>
> The above procedure has an obvious mistake: the variable ‘id’ has the same
> name as a column in test_table. The select statement should have generated
> an error, preferably at function creation time.
>
>
>
> What actually happens is that no error is thrown, the select result is not
> assigned to the variable ‘id’, and the function always returns -1.

-- 
Sent via pgsql-bugs mailing list (pgsql-bugs@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-bugs

Reply via email to