PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

CURSOR gerado dinamicamente no Postgresql


Você realmente precisa do cursor explícito? Se você precisar iterar sobre SQL dinâmico, poderá usar FOR IN EXECUTE . É um loop sobre o cursor implícito (interno) para SQL dinâmico
FOR db_rec IN EXECUTE v_sql_dynamic
LOOP
  ..
END LOOP

Uma solução um pouco mais complexa é descrita na documentação - 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 $$;

Com este tipo de cursor, você não pode usar FOR IN