BUG #6551: PL/pgSQL: GET DIAGNOSTICS not working for first OUT parameter
От | aburacze@gmail.com |
---|---|
Тема | BUG #6551: PL/pgSQL: GET DIAGNOSTICS not working for first OUT parameter |
Дата | |
Msg-id | E1SAlxY-0008UU-A4@wrigleys.postgresql.org обсуждение исходный текст |
Ответы |
Re: BUG #6551: PL/pgSQL: GET DIAGNOSTICS not working
for first OUT parameter
Re: BUG #6551: PL/pgSQL: GET DIAGNOSTICS not working for first OUT parameter |
Список | pgsql-bugs |
The following bug has been logged on the website: Bug reference: 6551 Logged by: Adam Buraczewski Email address: aburacze@gmail.com PostgreSQL version: 9.1.3 Operating system: Linux (Fedora 16) Description:=20=20=20=20=20=20=20=20 Hi! I have just found strange behaviour of PL/pgSQL in case of using OUT parameters and GET DIAGNOSTICS var =3D ROW_COUNT (PostgreSQL 9.1.3). Here i= s a self-contained example: create table t (c integer); create function p(out x1 integer, out x2 integer, out x3 integer) as $$ begin insert into t values (1); get diagnostics x1 =3D row_count; insert into t values (2); get diagnostics x2 =3D row_count; insert into t values (3); get diagnostics x3 =3D row_count; end; $$ language plpgsql; select * from p(); x1 | x2 | x3=20 ----+----+---- | 1 | 1 Why x1 is NULL instead of the value 1? I found a workaround: declare a temporary variable inside the function then assign ROW_COUNT to that variable and then assign temporary variable to the OUT parameter. It works but probably is not the solution one could expect: create function p_workaround(out x1 integer, out x2 integer, out x3 integer) as $$ declare tmpvar integer; begin insert into t values (1); get diagnostics tmpvar =3D row_count; x1 :=3D tmpvar; insert into t values (2); get diagnostics x2 =3D row_count; insert into t values (3); get diagnostics x3 =3D row_count; end; $$ language plpgsql; select * from p_workaround(); x1 | x2 | x3=20 ----+----+---- 1 | 1 | 1 Best regards, Adam
В списке pgsql-bugs по дате отправления: