Você realmente precisa do cursor explícito? Se você precisar iterar sobre SQL dinâmico, poderá usar
FOR IN EXECUTE
. É um loop sobre o cursor implícito (interno) para SQL dinâmico FOR db_rec IN EXECUTE v_sql_dynamic
LOOP
..
END LOOP
Uma solução um pouco mais complexa é descrita na documentação -
OPEN FOR EXECUTE
:do $$
declare r refcursor; rec record;
begin
open r for execute 'select * from pg_class';
fetch next from r into rec;
while found
loop
raise notice '%', rec;
fetch next from r into rec;
end loop;
close r;
end $$;
Com este tipo de cursor, você não pode usar
FOR IN