Hallo *All,
ich habe folgendes Problem:

In einem SQLRPGLE Program soll eine volldynamische Subfile gefüllt werden (nur 15 Sätze je Seite einlesen). Volldynamisch, weil in diesem Programm mit zwei Subfiles gearbeitet wird. Mit F11 kann dann innerhalb der Subfiles hin und her geschaltet werden.
Für das Rückwärtsblättern wollte ich fetch relative verwenden. Hierfür benötigt man in der declare Anweisung das Schlüsselwort SCROLL.

Mein Problem ist nunmehr. Die Performance geht dermaßen in den Keller, sobald in der prepare Anweisung mit SCROLL gearbeitet wird.
Das gleiche Programm ohne SCROLL ist rasant schnell (implementiert noch ohne Rückwärtsblättern)

Im Debug Modus habe ich gesehen, dass in beiden Varianten die gleichen Indizes gefunden werden. Es ist alles gleich. Nur mit Scroll 2 Sekunden, ohne Scroll 4 Minuten. Diese Performanceunterschiede finden schon beim Open statt.

SQL wird dynamisch zusammengebaut.

Anbei die statements:

SELECT OHODDD, OHODMM, OHODYY, OHODCC, OHSODN, ODPLIN, ODSLIN
FROM OHTRNP, ODTRNP
WHERE OHSODN = ODSODN AND
(ODODPT = '21451-19A00-000' OR ODALPT = '21451-19A00-000')
ORDER BY OHODCC DESC, OHODYY DESC, OHODMM DESC,
OHODDD DESC, OHSODN DESC


c/EXEC SQL
c+ PREPARE S2 FROM :W@SQLSTRING
c/END-EXEC
**
c/EXEC SQL
c+ DECLARE C2 SCROLL CURSOR FOR S2
c/END-EXEC
**
c/EXEC SQL
c+ OPEN C2
c/END-EXEC
**

** Vorwärtsblättern

c if W@Direct = 'ROLLUP'
c/exec sql
c+ FETCH NEXT FROM C2 FOR 15 ROWS INTO : W@SqlData
c/end-exec
c else
** Rückwärtsblättern
c/exec sql
c+ FETCH RELATIVE :n FROM C2 FOR 15 ROWS INTO : W@SqlData
c/end-exec
c endif


Ich hoffe, Ihr könnt mir weiterhelfen.

Im voaus besten Dank.

mfg
Klaus