| PostgreSQL: Das Offizielle Handbuch | ||||
|---|---|---|---|---|
| Zurück | Schnell zurück | Schnell nach vorne | Nach vorne | |
DECLARE cursorname [ BINARY ] [ INSENSITIVE ] [ SCROLL ]
CURSOR FOR anfrage
[ FOR { READ ONLY | UPDATE [ OF spalte [, ...] ] } ]Mit DECLARE werden Cursor erzeugt, mit denen aus einer großen Anfrage Stück für Stück eine kleine Anzahl von Zeilen gelesen werden kann. Die Daten werden mit FETCH aus dem Cursor gelesen, entweder im Textformat oder im binären Format.
Normale Cursor geben Daten im Textformat zurück, wie SELECT. Da Daten intern in einem binären Format gespeichert werden, müssen die Daten vom System erst in das Textformat umgewandelt werden. Wenn die Daten im Textformat zurückgegeben werden, dann müssen die Clientanwendungen sie in ein binäres Format umwandeln um sie zu verarbeiten. Außerdem sind die Daten im Textformat oft größer als im binären Format. Binäre Cursor geben die Daten im internen binären Format zurück. Wenn Sie die Daten aber sowieso als Text ausgeben wollen, dann ersparen Sie sich einige Arbeit im Client, wenn Sie sie vom Server im Textformat anfordern.
Wenn eine Anfrage zum Beispiel den Wert eins aus einer Spalte des Typs integer zurückgibt, dann würden Sie mit einem normalen Cursor die Zeichenkette 1 erhalten und mit einem binären Cursor einen 4-Byte-Wert mit der internen Darstellung des Wertes.
Binäre Cursor sollten nicht sorglos verwendet werden. Viele Anwendungen, wie auch psql, sind nicht auf binäre Cursor vorbereitet und erwarten die Daten im Textformat.
Die Textdarstellung ist Architektur-neutral, aber die binäre Darstellung kann sich zwischen Maschinen mit unterschiedlichen Architekturen unterscheiden. PostgreSQL kümmert sich bei binären Cursorn nicht um die Umwandlung der Bytereihenfolge oder anderer Formatunterschiede. Wenn die Client- und die Servermaschine unterschiedliche interne Formate verwenden (z.B. unterschiedliche Bytereihenfolge), dann sollten Sie das binäre Format wahrscheinlich nicht verwenden.
Der Name des Cursors, zur Verwendung in FETCH-Operationen.
Damit gibt der Cursor die Daten im binären Format statt im Textformat zurück.
Gibt an, dass die aus dem Cursor zurückgegebenen Daten nicht von Aktualisierungen beeinflusst werden sollen, die während der Existenz des Cursors in den dem Cursor zugrunde liegenden Tabellen getätigt werden. In PostgreSQL ist das bei allen Cursorn der Fall; dieses Schlüsselwort hat keine Auswirkung und ist nur für die Kompatibilität mit dem SQL-Standard vorhanden.
Dieses Schlüsselwort gibt an, dass man auf die Zeilen des Cursors außer der Reihe (z.B. rückwärts) zugreifen kann. Zur Zeit ist es nur für die Kompatibilität mit dem SQL-Standard und hat in PostgreSQL keine Auswirkung.
Ein SELECT-Befehl, der die Zeilen ermittelt, die der Cursor zurückgibt. Informationen über gültige Anfragen erhalten Sie unter SELECT.
FOR READ ONLY gibt an, dass aus dem Cursor nur gelesen werden soll. FOR UPDATE gibt an, dass der Cursor auch für die Aktualisierung von Tabellen verwendet werden kann. Da aktualisierbare Cursor gegenwärtig in PostgreSQL nicht unterstützt werden, verursacht die Verwendung von FOR UPDATE eine Fehlermeldung und die Angabe von FOR READ ONLY hat keine Auswirkung.
Die Spalten, die vom Cursor aktualisiert werden sollen. Da aktualisierbare Cursor gegenwärtig in PostgreSQL nicht unterstützt werden, verursacht die Verwendung der Klausel FOR UPDATE eine Fehlermeldung.
Meldung, wenn der Cursor erfolgreich definiert wurde.
Diese Meldung wird ausgegeben, wenn der gleiche Cursorname in der aktuellen Transaktion schon deklariert wurde. Die vorherige Definition wird dann verworfen.
Diese Fehlermeldung wird ausgegeben, wenn der Cursor nicht in einem Transaktionsblock deklariert wird.
Ein Cursor kann nur in der aktuellen Transaktion verwendet werden. Daher ist es nur sinnvoll, DECLARE in einem Transaktionsblock (BEGIN/COMMIT-Paar) aufzurufen.
Der SQL-Standard sieht Cursor nur für eingebettetes SQL vor. Der PostgreSQL-Server implementiert keinen OPEN-Befehl für Cursor; ein Cursor ist geöffnet, wenn er deklariert wird. ECPG, der Präprozessor für eingebettetes SQL in PostgreSQL, unterstützt jedoch die Cursorkonventionen des SQL-Standards, einschließlich derer für die Befehle DECLARE und OPEN.
Die Definition eines einfachen Cursors:
DECLARE liahona CURSOR FOR SELECT * FROM filme;
Weitere Cursorbeispiele finden Sie unter FETCH.
Der SQL-Standard sieht Cursor nur für eingebettetes SQL und Module vor. In PostgreSQL können Cursor interaktiv verwendet werden.
Der SQL-Standard erlaubt Cursor, die Tabellendaten aktualisieren können. Cursor in PostgreSQL können nur gelesen werden.
Binäre Cursor sind eine PostgreSQL-Erweiterung.
| Zurück | Zum Anfang | Nach vorne |
| DEALLOCATE | Nach oben | DELETE |