Während der Programmentwicklung für iSeriesC können Sie die Commitsteuerung explizit im Programm angeben. In IBM® Rational EGL Server for IBM i werden jedoch einige implizite Commitsteuerungsfunktionen durchgeführt, wenn das Programm ausgeführt wird.
Während ein Programm in EGL definiert wird, können Sie explizite Logiken zum Absetzen von Commits und Rollbacks sowohl für native Datenbankdateien in IBM i (mit relativen, seriellen und indizierten Datensätzen) als auch für SQL-Tabellen angeben. Diese Logik besteht aus Aufrufen der Systemfunktionen 'sysLib.commit()' und 'sysLib.rollback()'. Sie können die Systemvariable 'converseVar.commitOnConverse' auch auf '1' festlegen. Dadurch werden Änderungen festgeschrieben, wenn einem Benutzer durch eine CONVERSE-Anweisung ein Formular angezeigt wird.
Durch explizite Verwendung der Commitsteuerung wird die aktuelle Arbeitseinheit mit Wiederherstellung beendet und eine weitere gestartet. Durch Commitsteuerungsservices werden Datensätze freigegeben und Dateisperren beibehalten, wenn Änderungen festgeschrieben oder rückgängig gemacht werden.
In bestimmten Fällen wird in EGL automatisch eine Commitsteuerung durchgeführt. Diese implizite Commitsteuerung ist von allen Instanzen expliziter Commitsteuerung unabhängig. Wenn Sie Programme entwerfen, können Sie die implizite Commitsteuerung nutzen und die Verwendung expliziter Commitsteuerung vermeiden. In der folgenden Tabelle ist die in EGL durchgeführte Commitsteuerungsverarbeitung zusammengefasst.
| Ursache für das Beenden des Programms | Implizite Aktion | Hauptprogramm | Aufgerufenes Programm |
|---|---|---|---|
| TRANSFER TO ACTION oder SHOW | sysLib.commit() | ja | Nicht vorhanden |
| SQL CLOSE CURSOR | ja | Nicht vorhanden | |
| TRANSFER TO PROGRAM | sysLib.commit() | nein | Nicht vorhanden |
| SQL CLOSE CURSOR | ja | Nicht vorhanden | |
| EXIT PROGRAM | sysLib.commit() | ja | nein |
| SQL CLOSE CURSOR | ja | Ja, wenn die Ausführungseinheit durch das Programm gestartet wurde | |
| ERROR | sysLib.rollback() | ja | nein |
| SQL CLOSE CURSOR | ja | Ja, wenn die Ausführungseinheit durch das Programm gestartet wurde |