Das Pragma PREFETCH steuert den Schubmodus der SQL-Anweisung FETCH (Cursor positionieren). Der Schubmodus beschleunigt die Ausführung der Anweisung FETCH. Er ist nur wirksam, wenn FETCH den Cursor auf den nächsten Satz der Cursortabelle positioniert (FETCH NEXT...).
Über das Pragma PREFETCH können Sie den Schubmodus einschalten und einen Blockungsfaktor (n) festlegen. Bei Ausführung der ersten Anweisung FETCH NEXT... werden dann die Spaltenwerte des aktuellen Satzes gelesen, die folgenden n -1 Sätze der zugehörigen Cursortabelle werden in einem Zwischenpuffer gespeichert. Bei Ausführung der nachfolgenden n-1 Anweisungen FETCH NEXT..., die denselben Cursor bezeichnen, kann dann direkt, ohne DBH-Kontakt, auf den nächsten Satz zugegriffen werden.
Das Pragma PREFETCH hat nur in folgenden SQL-Anweisungen eine Wirkung:
DECLARE CURSOR (für statischen Cursor)
Cursorbeschreibung (für dynamische Cursor)
Enthält die Cursorbeschreibung der DECLARE CURSOR-Anweisung bzw. die Cursorbeschreibung für dynamische Cursor eine FOR UPDATE-Klausel, wird das Pragma PREFETCH ignoriert, der Schubmodus wird nicht eingeschaltet.
Der eingeschaltete Schubmodus macht den in der DECLARE CURSOR-Anweisung bzw. der Cursorbeschreibung vereinbarten Cursor zum Prefetch-Cursor.
Im linked-in-Betrieb wird ein Cursor mit Schubmodus nicht unterstützt.
PREFETCH
blockungsfaktor
blockungsfaktor
Den Blockungsfaktor müssen Sie als vorzeichenlose Ganzzahl angeben (Datentyp SMALLINT).
Hat der Blockungsfaktor (n) einen Wert > 0, werden maximal n-1 Sätze der spezifizierten Cursortabelle in einem Zwischenpuffer gespeichert.
Hat der Blockungsfaktor den Wert 0, bleibt das Pragma PREFETCH ohne Wirkung.
Sie können die Wirksamkeit des Pragmas und damit den Schubmodus ein- bzw. ausschalten, indem Sie für n einen Wert > 0 bzw. den Wert 0 angeben.
Bei eingeschaltetem Schubmodus gelten folgende Einschränkungen:
In derselben Übersetzungseinheit ist für den Prefetch-Cursor cursor nur noch die Anweisung FETCH NEXT erlaubt. Folgende SQL-Anweisungen sind nicht mehr ausführbar::
UPDATE ... WHERE CURRENT of cursor
DELETE ... WHERE CURRENT of cursor
STORE cursor
FETCH cursor mit einer anderen Cursorpositionierung als NEXT bzw. mit einer von der ersten Anweisung FETCH NEXT verschiedenen INTO-Klausel.
Nach Ausführung einer FETCH NEXT-Anweisung, deren INTO-Klausel den Namen eines SQL-Deskriptorbereichs enthält, darf dieser SQL-Deskriptorbereich nicht durch eine SET DESCRIPTOR-, DESCRIBE- oder DEALLOCATE DESCRIPTOR-Anweisung verändert werden.
Der Prefetch-Cursor darf stets nur mit derselben Anweisung FETCH NEXT angesprochen werden, d.h. mit derselben Anweisung in einer Schleife oder einem Unterprogramm..