sql >> Base de Datos >  >> RDS >> PostgreSQL

CURSOR generado dinámicamente en Postgresql

¿Realmente necesitas el cursor explícito? Si necesita iterar sobre SQL dinámico, puede usar FOR IN EXECUTE . Es un bucle sobre el cursor implícito (interno) para SQL dinámico

FOR db_rec IN EXECUTE v_sql_dynamic
LOOP
  ..
END LOOP

Una solución un poco más compleja se describe en documentación - 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 este tipo de cursor, no puede usar FOR IN