PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Dynamisch generierter CURSOR in Postgresql

Brauchen Sie wirklich den expliziten Cursor? Wenn Sie dynamisches SQL durchlaufen müssen, können Sie FOR IN EXECUTE verwenden . Es ist eine Schleife über den impliziten (internen) Cursor für dynamisches SQL

FOR db_rec IN EXECUTE v_sql_dynamic
LOOP
  ..
END LOOP

Eine etwas komplexere Lösung wird in der Dokumentation beschrieben - 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 $$;

Mit dieser Art von Cursor können Sie FOR IN nicht verwenden