Wieso bleiben die Dateien offen?
Weil SQL so arbeitet!!!

Der Close im Programm ist lediglich ein Soft- oder Pseudo-Close, d.h. er bewirkt nur, dass beim nächsten Aufruf die Daten im geöffneten Datenpfand aktualisiert werden können und dass der Cursor an den Anfang repositioniert wird.

Da der Optimierungsaufwand bei SQL weit höher ist als bei native I/O, d.h. ein Access Plan muss erstellt oder zumindest validiert werden (die vorhandenen Zugriffswege müssen bewertet werden und es muss festgelegt werden, welche temporären Objekte z.B. Hast Tables benötigt werden. Nach dieser Phase wird der Datenpfad (ODP) gebildet/geöffnet, d.h. die temporären Objekte erstellt und mit Daten gefüllt.

Wenn der ODP wieder verwendbar ist, bleibt er geöffnet, bis er über einen HARD Close geschlossen wird. Beim Hard Close werden die temporären Objekte gelöscht und beim nächsten Aufruf muss die komplette Optimierungs-/Öffnungs-Orgie wieder durchlaufen werden (FULL-OPEN).
Beim PSEUDO-Open, werden jeweils nur die Daten in den temporären Objekten aktualisiert.

Wenn Du Dein Programm mit Unterlassungswerten umgewandelt hast (wovon ich ausgehe) bleibt der ODP geöffnet, bis die Aktivierungsgruppe, in der das Programm oder die Prozedur läuft geschlossen wird.
Der ODP wird gelöscht, wenn Du in der Compile-Option CLOSQLCSR im Befehl CRTRPGSQLI *ENDMOD angibst. Dann wird der ODP jeweils beim Modul-Ende gelöscht. Bei wiederholten Aufrufen und vielen SQL-Statements kann dies zu einer wesentlich schlechteren Performance führen. Deshalb sollte diese Option nur in Ausnahmefällen geändert werden.

Birgitta