Обсуждение: pl/pgsql errors

Поиск
Список
Период
Сортировка

pl/pgsql errors

От
Tomasz Myrta
Дата:
Hi

create function....
declare  some_field   integer;
begin  some_field=1;  insert into some_table (some_field) values (some_field);
end;

When we try to execute such function, we get:
"ERROR:  parser: parse error at or near "$1" at character..."
Well, example above is clear enough to find, that I declared field with 
the same name as in a table. I lost a lot of time trying to find mistake 
inside long functions until I remembered, what this strange error mean.

Would it be difficult to add special ERROR for this case? It annoyed me 
so many times...

Regards,
Tomasz Myrta



Re: pl/pgsql errors

От
"Tambet Matiisen"
Дата:
----- Original Message -----
From: "Tomasz Myrta" <jasiek@klaster.net>
To: <pgsql-sql@postgresql.org>
Sent: Monday, March 03, 2003 1:32 PM
Subject: [SQL] pl/pgsql errors


> Hi
>
> create function....
> declare
>    some_field   integer;
> begin
>    some_field=1;
>    insert into some_table (some_field) values (some_field);
> end;
>
> When we try to execute such function, we get:
> "ERROR:  parser: parse error at or near "$1" at character..."
> Well, example above is clear enough to find, that I declared field with
> the same name as in a table. I lost a lot of time trying to find mistake
> inside long functions until I remembered, what this strange error mean.
>
> Would it be difficult to add special ERROR for this case? It annoyed me
> so many times...
>

Probably some_field was declared as alias for $1. I think plpgsql does
simple find&replace for aliases, that's how $1 appeared in wrong place. I
usually prefix all procedure parameters with p_, this guards me against this
situation and also makes code more clear.
 Tambet



Re: pl/pgsql errors

От
Tomasz Myrta
Дата:
> Probably some_field was declared as alias for $1. I think plpgsql does
> simple find&replace for aliases, that's how $1 appeared in wrong place. I
> usually prefix all procedure parameters with p_, this guards me against this
> situation and also makes code more clear.
> 
>   Tambet
No, no no
I always get this error where table column name equals to declared field 
name. I've just made a special test to check if it has something to 
aliases. Function below doesn't use any arguments nor aliases:

create or replace function test() returns integer as'
declare id_miasta integer;
begin insert into miasta(id_miasta,nazwa) values (id_miasta,null); return 1;
end;
' language 'plpgsql';

Error message is the same. I know this error very well, I know how to 
avoid it, but I'm just asking if it is difficult to change strange error 
message.

Regards,
Tomasz Myrta