sql >> Databáze >  >> RDS >> PostgreSQL

Dynamicky generovaný CURSOR v Postgresql

Opravdu potřebujete explicitní kurzor? Pokud potřebujete iterovat přes dynamické SQL, můžete použít FOR IN EXECUTE . Je to smyčka přes implicitní (interní) kurzor pro dynamické SQL

FOR db_rec IN EXECUTE v_sql_dynamic
LOOP
  ..
END LOOP

Trochu složitější řešení je popsáno v dokumentaci - 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 $$;

S tímto typem kurzoru nemůžete použít FOR IN




  1. Importujte data z tabulky Excel nebo CVS do MySQL

  2. Konfigurační soubor pro uchovávání parametrů připojovacího řetězce v Javě

  3. Vlákno bylo zavěšeno na java.net.SocketInputStream.socketRead0 (Nativní metoda), ví někdo, co se stalo?

  4. jak se vypořádat s přemapováním lze provést pouze pro uživatele, kteří byli namapováni na přihlášení Windows nebo SQL