Cursor gehören zu den fundamentalen Features, die jede Datenbank unbedingt bereitstellen sollte. Ohne Cursor ist es de facto unmöglich, eine vernünftige Anwendung im größeren Stile zu implementieren.
Warum sind Cursor von derart fundamentaler Bedeutung:
test=# SELECT * FROM t_preis; id | name | preis ----+--------+------- 1 | Whisky | 11.98 (1 row)
Wenn man ein SQL-Statement gegen die Datenbank absetzt, weiss man in aller Regel ja nicht, wieviele Datensätze von der Datenbank retourniert werden. In manchen Fällen wird 'SELECT *' wie in unserem Beispiel nur wenige Datensätze zurückgeben - es kann aber durchaus vorkommen, dass Sie von Tabellen selektieren, die Milliarden von verschiedenen Werten enthalten. Das Problem dabei: Bevor das Ergebnis an den Benutzer zurückgegeben wird, wird es vollständig berechnet. Selektieren Sie also 1.000.000.000 Datensätze aus einer Tabelle, können Sie sich bereits auf Fehlermeldungen gefasst machen. Wollen Sie größere Datenmengen verarbeiten, wird 'SELECT *' Ihr System schwer beschäftigen.
Um dennoch die Möglichkeit zu haben, große Datenmengen zu selektieren, muss sichergestellt werden, dass niemals zu große Datenmengen zur Abholung bereit stehen. Mit Hilfe von Cursorn wird es möglich, ein großes Ergebnis schrittweise berechnen zu lassen und schrittweise an den Client abzugeben.
Um einen Cursor zu erzeugen, benötigen Sie das Kommando DECLARE:
test=# \h DECLARE
Command: DECLARE
Description: define a cursor
Syntax:
DECLARE name [ BINARY ] [ INSENSITIVE ] [ [ NO ] SCROLL ]
CURSOR [ { WITH | WITHOUT } HOLD ] FOR query
[ FOR { READ ONLY | UPDATE [ OF column [, ...] ] } ]
In diesem Abschnitt werden wir uns sehr genau mit Cursorn beschäftigen und sehen, welche Möglichkeiten sich bieten.