Avez-vous vraiment besoin du curseur explicite ? Si vous avez besoin d'itérer sur SQL dynamique, vous pouvez utiliser FOR IN EXECUTE
. Il s'agit d'une boucle sur le curseur implicite (interne) pour SQL dynamique
FOR db_rec IN EXECUTE v_sql_dynamic
LOOP
..
END LOOP
Une solution un peu plus complexe est décrite dans la documentation
- 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 $$;
Avec ce type de curseur, vous ne pouvez pas utiliser FOR IN