Skip to main content

Direkte Verarbeitungs-Abfrage mit Cursor

Hintergrund

Man möchte eine Vielzahl von Datensätzen verarbeiten oder aktualisieren, muss ggf. aber vielleicht für jeden Datensatz eine Funktion oder Prozedur aufrufen. Gleichzeitig möchte man nicht eine spezielle Prozedur dafür erst schreiben müssen.

Umsetzung

Im iSQL mit `begin` und `end` einen Block schreiben, in dem ein Cursor (sh. Cursors in SQL Anywhere) über die Datensätze loopt und einzeln verarbeitet:

begin

FOR ds AS cur_ds NO SCROLL CURSOR FOR SELECT * FROM tabellenname WHERE ist_aktiv = 'Y' ORDER BY id
FOR UPDATE
DO

  -- irgendeine Datenverarbeitung ...

  UPDATE  tabellenname
  SET     ist_verarbeitet = 'Y'
  WHERE CURRENT OF cur_ds;
  
END FOR;
  
end