PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

CURSORE generato dinamicamente in Postgresql

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