Wenn ein Cursor geöffnet wird, wird er vor der ersten Zeile positioniert. Sie können den Cursor an eine absolute Position in Verhältnis zum Anfang oder zum Ende der Abfrageergebnisse positionieren oder ihn relativ zur aktuellen Cursorposition verschieben. Wie Sie im Einzelnen den Cursor verschieben und welche Vorgänge möglich sind, hängt von der Programmierschnittstelle ab.
Die Anzahl der Zeilenpositionen, die Sie mit einem Fetch-Vorgang abrufen können, wird durch die Größe einer Ganzzahl bestimmt. Mit einem Fetch-Vorgang können Sie Zeilen bis zu Nummer 2147483646 abrufen, wobei es sich um die größtmögliche Ganzzahl minus 1 handelt. Wenn Sie negative Werte verwenden (Zeilen in Bezug auf das Ende), können Sie Fetch-Vorgänge nach unten bis zum kleinsten negativen Wert, der in einer Ganzzahl möglich ist, plus 1 ausführen.
Sie können spezielle positionsbasierte Aktualisierungs- oder Löschvorgänge verwenden, um die Zeile an der aktuellen Cursorposition zu aktualisieren oder zu löschen. Wenn der Cursor vor der ersten Zeile oder nach der letzten Zeile positioniert ist, wird ein Fehler zurückgegeben, der darüber informiert, dass keine entsprechende Cursorzeile vorhanden ist.
Einfügungen und manche Aktualisierungsvorgänge mit asensitiven Cursorn können Probleme mit der Cursorpositionierung verursachen. SQL Anywhere platziert eingefügte Zeilen an unvorhersehbaren Positionen innerhalb eines Cursors, falls die SELECT-Anweisung keine ORDER BY-Klausel hat. In einigen Fällen erscheint die eingefügte Zeile überhaupt erst, wenn der Cursor geschlossen und wieder geöffnet wurde. Bei SQL Anywhere tritt dies auf, wenn eine Arbeitstabelle erstellt werden musste, um den Cursor zu öffnen.
Die UPDATE-Anweisung kann bewirken, dass sich eine Zeile im Cursor verschiebt. Das passiert, wenn der Cursor eine ORDER BY-Klausel hat, die einen vorhandenen Index benutzt (es wird keine Arbeitstabelle erstellt). Mit der Verwendung eines statisch abrollenden Cursors werden diese Probleme vermieden, allerdings ist mehr Speicher und Verarbeitungsaufwand erforderlich.
![]() |
Kommentieren Sie diese Seite in DocCommentXchange.
|
Copyright © 2012, iAnywhere Solutions, Inc. - SQL Anywhere 12.0.1 |