sql >> Databasteknik >  >> RDS >> PostgreSQL

Dynamiskt genererad CURSOR i Postgresql

Behöver du verkligen den explicita markören? Om du behöver iterera över dynamisk SQL kan du använda FOR IN EXECUTE . Det är loop över implicit (intern) markör för dynamisk SQL

FOR db_rec IN EXECUTE v_sql_dynamic
LOOP
  ..
END LOOP

Lite mer komplex lösning beskrivs i dokumentationen - 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 den här typen av markör kan du inte använda FOR IN




  1. Hur man frågar metadata för index i PostgreSQL

  2. MySql - HAVING vs WHERE

  3. Hur ansluter man en tabell till denna SQL-kod?

  4. Oracle lagrad procedur fråga som att inte arbeta med markören