«すでに使用中のカーソル»で失敗しますエラー:再帰PostgreSQLの機能は、私はこのようなバウンドパラメーター化カーソルを使用して再帰的なPL/pgSQL関数を持っているメッセージ
select test_cursor(true)
Code: 42P03, ErrorMessage: cursor "cur" already in use
明らかに、私のカーソルの範囲は単一の関数呼び出しに限定されません。この問題を回避するためにグーグル後、私は、結合していないカーソルがこの制限を持っていないことに言及メーリングリストのアーカイブにこのmessageを見つけすなわち:
declare
mycursor refcursor;
begin
open mycursor for ...;
end;
しかし、私はアンバウンドカーソルをパラメータ化することができますどのように表示されません。また、私は結合していないカーソルでfor...loop
を使用することはできません。
-- 42601: cursor FOR loop must use a bound cursor variable
create or replace function test_cursor(rec boolean) returns void as $$
declare
cur refcursor;
begin
open cur for select * from generate_series(1,3);
for c in cur loop
if rec then
perform test_cursor(false);
end if;
end loop;
close cur;
end;
$$ language plpgsql;
は、誰かが別のアプローチを提案してもらえますか?
PS。私は、大量の再帰カーソルとパラメータ化されたカーソルを使用する大量のOracleストアドプロシージャを移植しています。グローバルにスコープされたカーソルでこの問題に遭遇するまで、変換は単純なようでした。