Wird ein Cursor geöffnet, ist 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 nicht-empfindlichen Cursor können Probleme mit der Positionierung von Cursor 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 nicht, bis der Cursor geschlossen und wieder geöffnet wurde. Bei SQL Anywhere tritt dies auf, wenn zum Öffnen eines Cursors eine Arbeitstabelle erstellt werden musste. Siehe Arbeitstabellen in der Abfrageverarbeitung verwenden ("Alle Zeilen" als Optimierungsziel verwenden).
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. Senden Sie uns Feedback über diese Seite via E-Mail. |
Copyright © 2009, iAnywhere Solutions, Inc. - SQL Anywhere 11.0.1 |