Wenn ich mir den Code so betrachte ist das so falsch wie nur irgend möglich !!

Was passiert denn eigentlich wenn mehr als 1 Feld geändert wird ?
=> Es wird nur das 1. geänderte Feld in die Datei geschrieben !!

Warum ?

Ein SELECT entspricht einem IF ... ELSE IF ... ELSE IF ... ENDIF ENDIF

Und wozu soll das dann gut sein ?

Ausserdem muss man zu RPG folgendes wissen:
Die DB400 arbeitet mit einem internen Dateipuffer, der von RPG pro Feld mit einem MOVE gefüllt wird bevor die EA-Operation stattfindet. Deshalb optimiert der Compiler auf Grund der Verwendung von Feldern.
Werden Felder nicht verwendet, findet auch keine Übertragung statt, weder beim Lesen noch beim Schreiben.

Der Update ändert nun ALLE Felder automatisch mit, so dass eigentlich die Abfrage ob sich was geändert hat müssig ist.

Und nun zu embedded SQL:

Der Update sieht hierzu ganz simpel aus, da (wie oben angemerkt) kein Performance-Gewinn entsteht wenn jedes Feld einzeln geändert wird.

UPDATE MYFILE SET F1=:UF1, F2=:UF2 ...
WHERE KEY1=:UKEY1 and KEY2=:UKEY2 ...

Auch hier ist es wenig sinnvoll den Update zu zerlegen, da sonst für jedes Feld ein einzelner Update erforderlch wäre.
Auch hierzu sei zu bemerken, dass SQL intern nicht anders arbeitet als RPG: Satz lesen, Felder übertragen, Satz updaten.