非互換
PL/pgSQLでのバウンドカーソル変数へのポータル名の割り当てルールを変更します。
バウンドカーソル変数のポータル名は、変数名と一致するように割り当てられていました。
postgres=# create or replace function forc01() returns void as $$ postgres$# declare postgres$# c cursor(r1 integer, r2 integer) postgres$# for select * from generate_series(r1,r2) i; postgres$# begin postgres$# for r in c(5,7) loop postgres$# raise notice '% from %', r.i, c; postgres$# end loop; postgres$# return; postgres$# end; postgres$# $$ language plpgsql; CREATE FUNCTION postgres=# select forc01(); NOTICE: 5 from c NOTICE: 6 from c NOTICE: 7 from c forc01 -------- (1 行)
バウンドカーソル変数のポータル名は、変数名と一致しなくなります。
postgres=# create or replace function forc01() returns void as $$ postgres$# declare postgres$# c cursor(r1 integer, r2 integer) postgres$# for select * from generate_series(r1,r2) i; postgres$# begin postgres$# for r in c(5,7) loop postgres$# raise notice '% from %', r.i, c; postgres$# end loop; postgres$# return; postgres$# end; postgres$# $$ language plpgsql; CREATE FUNCTION postgres=# select forc01(); NOTICE: 5 from <unnamed portal 1> NOTICE: 6 from <unnamed portal 1> NOTICE: 7 from <unnamed portal 1> forc01 -------- (1 行)
対処方法
以前の動作に戻すためには、カーソル変数に明示的にポータル名を割り当ててください。
上記の例の場合、下記の行をbeginの後に追加することで、以前と同じ動作にできます。
c: = ‘c’;