FETCH

Name

FETCH -- liest Zeilen aus einer Anfrage mit einem Cursor

Synopsis

FETCH [ FORWARD | BACKWARD | RELATIVE ] [ anzahl | ALL | NEXT | PRIOR ] { FROM | IN } cursor

Beschreibung

FETCH liest Zeilen aus einem Cursor. Die Anzahl der zu lesenden Zeilen wird durch den Parameter anzahl angegeben. Wenn weniger Zeilen im Cursor übrig sind, dann werden nur die übrigen zurückgegeben. Wenn das Schlüsselwort ALL anstelle der Anzahl verwendet wird, dann alle übrigen Zeilen aus dem Cursor gelesen. Zeilen können vorwärts (mit FORWARD) oder rückwärts (mit BACKWARD) gelesen werden. Wenn keine Richtung angegeben wird, dann wird vorwärts gelesen.

Parameter

FORWARD

Liest die folgende(n) Zeile(n). Das ist die Voreinstellung, wenn keine andere Richtung angegeben ist.

BACKWARD

Liest die vorangehende(n) Zeile(n).

RELATIVE

Keine Auswirkung; nur für Kompatibilität mit dem SQL-Standard.

anzahl

Eine ganze Zahl, die angibt, wie viele Zeilen gelesen werden sollen. Ein negative Zahl vertauscht den Sinn von FORWARD und BACKWARD.

ALL

Liest alle übrigen Zeilen.

NEXT

Liest die nächste Zeile; das Gleiche wie 1 als Anzahl.

PRIOR

Liest die vorangehende Zeile; das Gleiche wie -1 als Anzahl.

cursor

Der Name eines offenen Cursors.

Meldungen

WARNING: PerformPortalFetch: portal "cursor" not found

Meldung, wenn cursor nicht vorher deklariert worden ist. Beachten Sie, dass ein Cursor nur in der Transaktion gilt, in der er deklariert wurde.

WARNING: FETCH/ABSOLUTE not supported, using RELATIVE

PostgreSQL unterstützt die absolute Positionierung eines Cursors nicht.

ERROR: FETCH/RELATIVE at current position is not supported

Nach dem SQL-Standard kann man die Zeile an der „aktuellen Cursorposition“ wiederholt mit der Syntax

FETCH RELATIVE 0 FROM cursor.

auslesen. PostgreSQL unterstützt das gegenwärtig nicht; die 0 gibt vielmehr an, dass alle Zeilen gelesen werden sollen, wie mit dem Schlüsselwort ALL. Wenn das Schlüsselwort RELATIVE verwendet wurde, dann nimmt PostgreSQL an, dass der Benutzer das Verhalten nach dem SQL-Standard wollte, und gibt diese Fehlermeldung aus.

Hinweise

PostgreSQL unterstützt gegenwärtig nicht das Aktualisieren von Daten durch einen Cursor.

Cursor gelten nur in der Transaktion, in der sie deklariert worden sind.

Beispiele

Im folgenden Beispiel wird eine Tabelle mit einem Cursor gelesen.

BEGIN WORK;

-- Cursor einrichten:
DECLARE liahona CURSOR FOR SELECT * FROM filme;

-- Die ersten 5 Zeilen aud Cursor liahona lesen:
FETCH FORWARD 5 FROM liahona;

 code  |          titel          | vid | prod_datum |   genre    | länge
-------+-------------------------+-----+------------+------------+-------
 BL101 | The Third Man           | 101 | 1949-12-23 | Drama      | 01:44
 BL102 | The African Queen       | 101 | 1951-08-11 | Romantisch | 01:43
 JL201 | Une Femme est une Femme | 102 | 1961-03-12 | Romantisch | 01:25
 P_301 | Vertigo                 | 103 | 1958-11-14 | Action     | 02:08
 P_302 | Becket                  | 103 | 1964-02-03 | Drama      | 02:28

-- Die vorangegangene Zeile lesen:
FETCH BACKWARD 1 IN liahona;

 code  |  titel  | vid | prod_datum | genre  | länge
-------+---------+-----+------------+--------+-------
 P_301 | Vertigo | 103 | 1958-11-14 | Action | 02:08

-- Den Cursor schließen und die Transaktion beenden:
CLOSE liahona;
COMMIT WORK;

Kompatibilität

Der SQL-Standard definiert FETCH nur für eingebettetes SQL. Die hier beschriebene Variante von FETCH gibt die Daten zurück, als ob sie ein SELECT-Ergebnis wären, anstatt sie in Host-Variablen abzulegen. Abgesehen davon ist FETCH mit dem SQL-Standard kompatibel.

Die Formen von FETCH mit FORWARD und BACKWARD, sowie die Formen FETCH anzahl und FETCH ALL, bei denen FORWARD implizit ist, sind PostgreSQL-Erweiterungen.

Der SQL-Standard erlaubt nur FROM vor dem Cursornamen; die Möglichkeit IN zu verwenden ist eine Erweiterung.

Siehe Auch

DECLARE, MOVE