Innerhalb einer UDF ist es nicht möglich, eine Transaktion zu starten.
Dies muss das aufrufende Programm machen.
Via "exec sql set option commit = *chg;" teilst du deinem SQL-Programm mit, dass du Transaktionen machst.
Mit dem 1. Update/Insert/Delete wird dann eine Transaktion gestartet.
Dann kannst du mehrere Datenänderungen durchführen.
Wenn für das Programm alles OK ist, schließt ein "exec sql commit;" die Transaktion ab, hebt alle Speren auf und die Daten sind von anderen Jobs wieder änderbar.
Tritt während der Verarbeitung ein Businesslogik-Fehler auf, macht du einen "exec sql rollback;".
Führt dein Programm zu einem Absturz wird ggf. vom System beim Ende der ACTGRP oder bei Jobende eine Rollback durchgeführt.

Auf Grund der Sperre aller Änderungen ist eine Dialogeingabe durch User verboten. Denn wenn der gerade Pause macht bleiben die Daten gesperrt und andere Jobs fallen ggf. mit Satzsperren-Timeout auf die Nase.

Bei commit *none (Default) wird ein sog. Autocommit gemacht, d.h., jede Änderung wird sofort durchgeführt und sperrt nicht.