Hai davvero bisogno del cursore esplicito? Se hai bisogno di eseguire un'iterazione su SQL dinamico, puoi usare FOR IN EXECUTE
. È un ciclo sul cursore implicito (interno) per SQL dinamico
FOR db_rec IN EXECUTE v_sql_dynamic
LOOP
..
END LOOP
Una soluzione un po' più complessa è descritta nella documentazione
- 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 $$;
Con questo tipo di cursore, non puoi usare FOR IN