Also ein FETCH sollte schon einen SQLCODE = 100 am Ende liefern.
Da ich dies so nicht direkt im DOW abfragen kann, geh ich einfach folgendermaßen vor:

exec sql open...;
dow 1=1;
exec sql fetch ....;
if SQLCODE <> *zero;
leave;
endif;
enddo;
exec sql close...;

Die Anzahl zähle ich selber, da der Cursor die Anzahl nicht liefert und ein Select count(*) die Daten ein 2. Mal verarbeitet.

Deine LF mit Select/Omit kannst du vergessen. Beobachte mal per Debugger, ob diese LF denn von SQL überhaupt verwendet wird.
I.d.R. wird eine LF mit select/omit nur verwendet, wenn die Where-Klausel des SQL's der Definition der LF entspricht (ab v7.x). Ansonsten wird dein SQL nämlich neu generiert mit den Select/Omit der LF und auf die PF losgeschickt.