Re: BUG #14275: cursor's variable in pgsql doesn't respect scope
От | klimych@tut.by |
---|---|
Тема | Re: BUG #14275: cursor's variable in pgsql doesn't respect scope |
Дата | |
Msg-id | 819481470315336@web11m.yandex.ru обсуждение исходный текст |
Ответ на | Re: BUG #14275: cursor's variable in pgsql doesn't respect scope (Pavel Stehule <pavel.stehule@gmail.com>) |
Список | pgsql-bugs |
Wow. Thank you! Sorry, i should read the documentation more carefully 03.08.2016, 16:04, "Pavel Stehule" <pavel.stehule@gmail.com>: > 2016-08-03 11:53 GMT+02:00 <klimych@tut.by>: >> The following bug has been logged on the website: >> >> Bug reference:Â Â Â 14275 >> Logged by:Â Â Â Â Â Oleg Klimovich >> Email address:Â Â Â klimych@tut.by >> PostgreSQL version: 9.5.3 >> Operating system:Â Â Windows 7, Windows 8, Ubuntu 14.04 >> Description: >> >> DO $$ >> DECLARE >> Â cur cursor for select 1; -- (1) >> BEGIN >> Â open cur; -- (2) >> >> Â DECLARE >> Â Â cur cursor for select 2; -- (3) >> Â BEGIN >> Â Â open cur; -- (4) >> Â Â close cur; -- (5) >> Â END; >> >> Â close cur; -- (6) >> end $$; >> >> Executing of the code gives error "cursor "cur" already in use". Evedently, >> PG in statement (4) refers to the variable, defined in statement (1). (and I >> expect it should be variable, defined in statement (3)). >> Futhermore, same error exists even across different functions: >> >> create function func1() returns void as $$ >> declare >> Â cur cursor for select 1; >> BEGIN >> Â open cur; >> Â close cur; >> end >> $$ >> Â LANGUAGE 'plpgsql'; >> >> create function func2() returns void as $$ >> declare >> Â cur cursor for select 1; >> BEGIN >> Â open cur; >> >> Â PERFORM func1(); >> >> Â close cur; >> end >> $$ >> Â LANGUAGE 'plpgsql'; >> >> select func2(); >> >> So, cursor's variable is kind of global. I just hope it's a bug and not >> "feature" (at least I haven't found mention of such behaviour in >> documentation) > > It is feature - PLpgSQL engine uses named cursor accessed via SPI API. The name of SPI cursor is generated by cursor variablename. SPI API has zero relation to plpgsql block structure. > > See source code pl_exec.c exec_stmt_open > > Regards > > Pavel > >> -- >> Sent via pgsql-bugs mailing list (pgsql-bugs@postgresql.org) >> To make changes to your subscription: >> http://www.postgresql.org/mailpref/pgsql-bugs
В списке pgsql-bugs по дате отправления: