Re: PL/pgSQL: possible parsing or documentation bug?
От | Tom Lane |
---|---|
Тема | Re: PL/pgSQL: possible parsing or documentation bug? |
Дата | |
Msg-id | 4317.981238551@sss.pgh.pa.us обсуждение исходный текст |
Ответ на | PL/pgSQL: possible parsing or documentation bug? ("Albert REINER" <areiner@tph.tuwien.ac.at>) |
Список | pgsql-sql |
"Albert REINER" <areiner@tph.tuwien.ac.at> writes: > create Function IdOfPossiblyNewAuthor(text) returns int4 as ' > declare > id int4; > begin > select id into id from author where name = $1; > raise notice ''ID found: %'', id; > if id is null then > insert into author (name) values ($1); > select currval(''author_id_seq'') into id; > raise debug ''Author inserted. ID: %'', id; > end if; > return id; > end; > ' language 'plpgsql' with (IsCachable); > Logically it is clear which "id" should be parsed as the variable, > which as author.id, No, it is not so clear. Consider the following: declare x int4; y int4;begin x := ...; select x + f1 into y from tab1 where ...; The intent here is clearly to find a value tab1.f1 in tab1 and then add the local variable x to form a value for the local variable y. In general plpgsql will try to match an unqualified name to a variable before it will consider whether it might be a field name. If you don't want that, qualify the field name: select author.id into id from author where name = $1; Feel free to submit documentation updates to make this clearer... regards, tom lane
В списке pgsql-sql по дате отправления: