%OPEN funktioniert nicht mit SQL sondern ist eine reine RPGLE-Funktion auf Dateien der F-Bestimmungen.

Präventive Closes bedeuten ja nichts anderes als dass man nicht weiß was in dem Programm geschieht.
Generell gibt es eine Option wann ein Cursor automatisch geschlossen wird.

set option closqlcur = *ENDMOD / *ENDACTGRP;

Zusätzlich könnte man Hauprprogramme die aus einem Menü aufgerufen werden immer mit ACTGRP(*NEW) umwandeln, dann wird auch alles geschlossen was zu der ACTGRP gehört.

Ansonsten ist es halt guter Stil, wenn man im Programm Ressourcen freigibt wenn man sie nicht mehr braucht.
Und wenn ihr halt grundsätzlich einen Close vor einem Open macht dann gibts halt die Joblogeinträge.

Also bevor man eine Unterroutine verlässt immer überlegen, ob man den geöffneten Cursor in dieser Routine nicht schließt. Dies gilt auch für Fehlerbehandlung.