Du musst unterscheiden zwischen SQL und RLA (klassisch).
Commit(*CHG) besagt ja nur, dass geänderte Daten bis zum Commit gesperrt bleiben.
Beim Lesen mit SQL Select entsteht erstmal keine Sperre.
Machst du aber per Chain/READ/READE einen Zugriff auf eine PF/LF die für Update geöffnet ist, wird weiterhin eine Sperre auf diesem Satz gesetzt.
Dies entspricht i.Ü. auch dem "Select .... for update".
Vorsicht ist bei einem Commit(*CS/*ALL). In diesem Fall werden alle gelesenen Sätze mit Select ebenso gesperrt.
Für einen erfolgreichen Commit/Rollback müssen alle betroffenen Tabellen in einem Journal aufgezeichnet sein. Bei F-Bestimmungen müssen die Dateien ebenso mit "commit" gekennzeichnet werden da sonst für diese Zugriffe intern automatisch "with nc" angewendet wird.
Dies gilt i.Ü. auch für SQL: "Update ... with nc" untergräbt eine Transaktionskontrolle.

Nachtrag:
Wenn du dieselbe Tabelle per F-Bestimmung sperrst wird ein anderer SQL auch im selben Job gehindert einen Update durchzuführen da SQL den Open der F-Bestimmung nicht verwendet.

https://www.ibm.com/docs/en/i/7.1?to...mit-lock-level