Du arbeitest hier mit "dynamischem SQL".

Mit "Declare xxx Cursor for yyy" erstellst du einen SQL-Cursor xxx für ein Statement yyy, also für eine Anweisung, mit dem Namen yyy, an Stelle eines Cursor mit einem "Select".

Statements müssen an SQL übergeben werden. SQL muss natürlich prüfen, ob die Anweisung korrekt ist und was für einen Typ die Anweisung hat.
Dafür steht der "Prepare" => Vorbereiten.

Cursor werden dann ganz normal mit "Open", "Fetch" (entspricht dem read) und "Close" verarbeitet.

Der Trick an der Sache ist, dass man SQL hier quasi missbraucht.
Da ausser REXX un ggf. Basic keine dynamischen Rechnenoperationen unterstützen, mache ich mir hier die SQL-Funktionen zu Nutze.

Das Gegenstück in RPG wäre:

c/exec sql
c+ set : myvar = Formel
c/end-exec

Die Set-Anweisung geht aber leider nicht dynamisch.

Alle anderen Anweisungen ausser Select lassen sich mit "execute immediate :mystmt" sofort ausführen.

Nach dem Prepare ist der SQLCOD auszuwerten um Fehler in der Formel festzustellen.
In SQLERD steht dann sogar die Position des Fehlers (in 4-byte-Binär) so dass man auch dem Benutzer dann Fehler anzeigen kann.