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

Dynamisk genereret CURSOR i Postgresql

Har du virkelig brug for den eksplicitte markør? Hvis du har brug for iteration over dynamisk SQL, så kan du bruge FOR IN EXECUTE . Det er loop over implicit (intern) markør for dynamisk SQL

FOR db_rec IN EXECUTE v_sql_dynamic
LOOP
  ..
END LOOP

En lille smule mere kompleks løsning er beskrevet i dokumentation - 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 $$;

Med denne type markør kan du ikke bruge FOR IN




  1. MySQL til at udfylde manglende datoer, når du bruger GROUP BY DATE(table.timestamp) uden at deltage i den midlertidige tabel

  2. @@Fetch_status i postgreSQL

  3. Fejlfinding af CPU-ydeevne på VMware

  4. serie i postgres bliver øget, selvom jeg tilføjede om konflikt gør ingenting