The following bug has been logged on the website: Bug reference: 6551 Logged by: Adam Buraczewski Email address: abura...@gmail.com PostgreSQL version: 9.1.3 Operating system: Linux (Fedora 16) Description:
Hi! I have just found strange behaviour of PL/pgSQL in case of using OUT parameters and GET DIAGNOSTICS var = ROW_COUNT (PostgreSQL 9.1.3). Here is 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 = row_count; insert into t values (2); get diagnostics x2 = row_count; insert into t values (3); get diagnostics x3 = row_count; end; $$ language plpgsql; select * from p(); x1 | x2 | x3 ----+----+---- | 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 = row_count; x1 := tmpvar; insert into t values (2); get diagnostics x2 = row_count; insert into t values (3); get diagnostics x3 = row_count; end; $$ language plpgsql; select * from p_workaround(); x1 | x2 | x3 ----+----+---- 1 | 1 | 1 Best regards, Adam -- Sent via pgsql-bugs mailing list (pgsql-bugs@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-bugs