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