| PostgreSQL: Das Offizielle Handbuch | ||||
|---|---|---|---|---|
| Zurück | Schnell zurück | Schnell nach vorne | Nach vorne | |
FETCH [ FORWARD | BACKWARD | RELATIVE ] [ anzahl | ALL | NEXT | PRIOR ] { FROM | IN } cursorFETCH 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.
Liest die folgende(n) Zeile(n). Das ist die Voreinstellung, wenn keine andere Richtung angegeben ist.
Liest die vorangehende(n) Zeile(n).
Keine Auswirkung; nur für Kompatibilität mit dem SQL-Standard.
Eine ganze Zahl, die angibt, wie viele Zeilen gelesen werden sollen. Ein negative Zahl vertauscht den Sinn von FORWARD und BACKWARD.
Liest alle übrigen Zeilen.
Liest die nächste Zeile; das Gleiche wie 1 als Anzahl.
Liest die vorangehende Zeile; das Gleiche wie -1 als Anzahl.
Der Name eines offenen Cursors.
Meldung, wenn cursor nicht vorher deklariert worden ist. Beachten Sie, dass ein Cursor nur in der Transaktion gilt, in der er deklariert wurde.
PostgreSQL unterstützt die absolute Positionierung eines Cursors nicht.
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.
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.
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;
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.
| Zurück | Zum Anfang | Nach vorne |
| EXPLAIN | Nach oben | GRANT |