Обсуждение: 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... Regards, Tomasz Myrta
----- 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
> 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