PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

CURSEUR généré dynamiquement dans Postgresql

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