Pakete bringen eh nur dann etwas, wenn man mit Parametermarkern bzw. unveränderten SQL's arbeitet.
Werden, wie häufig, die SQL's incl. der Abfragewerte im Programm zusammengebaut, muss ja jedesmal ein Syntaxcheck durchgeführt werden.
Ab V5R2 schaut der Optimizer, ob die Parameterwerte ggf. durch Marker ersetzt werden können und prüft dann, ob der SQL bereits im Paket vorliegt.
Ist das der Fall, kann jetzt nachgeschaut werden, ob die Datei/en bereits geöffnet sind (ODP).
Vor V5R2 wird der SQL im Paket abgelegt und kann eigentlich selten wiederverwendet werden (die Parameter veränderen sich ja ständig).

Werden nun Marker "?" verwendet, erfolgt der Syntaxcheck incl. Paket-Prüfung /-Ablage nur 1 Mal, ein Cursor wird geöffnet und jeder nachfolgende Aufruf verwendet diesen Cursor. Das Paket ist dann gar nicht mehr im Spiel.

Auch das Transfervolumen zur AS/400 veringert sich.

Beispiel:

Select f1, f2, ... from ... where F1='bla' and f2=12 and ...

Dies ist die schlechteste Lösung, da ja erst der Syntaxcheck erfolgen muss.
Auch der ODBC-Treiber, ADO/DAO-Komponenten können nicht auf Prepared-Statements zurückgreifen !
Schon im PC müssen alle Objekte verworfen und neu erstellt werden.

Besser:
Select f1, f2, ... from ... where F1=? and f2=? and ...

CmdObj(0) = Wert1
CmdObj(1) = Wert2
:
execute

Das Gleiche gilt für Updates/Inserts/Deletes/Procedures, also alles was irgendwie parametrierbar ist.