Dieses Beispiel verwendet eine einfache Abfrage, um zu illustrieren, wie verschiedene Cursor auf eine Zeile in der Ergebnismenge reagieren, die gelöscht wird.
Es gibt die folgende Abfolge von Ereignissen:
Eine Anwendung öffnet in der Beispieldatenbank in der folgenden Abfrage einen Cursor.
SELECT EmployeeID, Surname FROM Employees ORDER BY EmployeeID; |
EmployeeID | Surname |
---|---|
102 | Whitney |
105 | Cobb |
160 | Breault |
... | ... |
Die Anwendung ruft die erste Zeile durch den Cursor ab (102).
Die Anwendung ruft die nächste Zeile durch den Cursor ab (105).
Eine weitere Anwendung löscht Mitarbeiter 102 (Whitney) und schreibt die Änderung fest.
In dieser Situation hängen die Ergebnisse der Cursor-Aktionen von der Cursor-Empfindlichkeit ab.
Unempfindliche Cursor Das DELETE wird weder in der Mitgliedschaft noch in den Werten der Ergebnisse, wie sie durch den Cursor gesehen werden, widergespiegelt:
Maßnahme | Ergebnis |
---|---|
Vorherige Zeile abrufen | Gibt die ursprüngliche Kopie der Zeile zurück (102). |
Erste Zeile abrufen (absoluter Abruf) | Gibt die ursprüngliche Kopie der Zeile zurück (102). |
Zweite Zeile abrufen (absoluter Abruf) | Gibt die ungeänderte Zeile zurück (105). |
Empfindliche Cursor Die Mitgliedschaft der Ergebnismenge hat sich insofern geändert, dass jetzt Zeile 105 die erste Zeile in der Ergebnismenge ist:
Maßnahme |
Ergebnis |
---|---|
Vorherige Zeile abrufen | Gibt Zeile nicht gefunden zurück. Es gibt keine vorherige Zeile.
|
Erste Zeile abrufen (absoluter Abruf) | Gibt Zeile 105 zurück. |
Zweite Zeile abrufen (absoluter Abruf) | Gibt Zeile 160 zurück. |
Wertempfindliche Cursor Die Mitgliedschaft der Ergebnismenge ist unveränderlich, und daher ist Zeile 105 weiterhin die zweite Zeile in der Ergebnismenge. Das DELETE wird in den Werten des Cursors widergespiegelt und erzeugt ein tatsächliches Loch in der Ergebnismenge.
Maßnahme | Ergebnis |
---|---|
Vorherige Zeile abrufen | Gibt Keine aktuelle Cursorzeile zurück. Wo vorher die erste Zeile war, steht jetzt im Cursor eine Lücke.
|
Erste Zeile abrufen (absoluter Abruf) | Gibt Keine aktuelle Cursorzeile zurück. Wo vorher die erste Zeile war, steht jetzt im Cursor eine Lücke.
|
Zweite Zeile abrufen (absoluter Abruf) | Gibt Zeile 105 zurück. |
Nicht-empfindliche Cursor In Bezug auf Änderungen sind Mitgliedschaft und Werte der Ergebnismenge unbestimmt. Die Antwort auf einen Abruf der vorherigen Zeile, der ersten Zeile oder der zweiten Zeile hängt von der entsprechenden Optimierungsmethode für die Abfrage ab, nämlich ob die Methode die Erstellung einer Arbeitstabelle erfordert und ob die abgerufene Zeile vom Client vorab abgerufen wurde.
Der Vorteil von nicht-empfindlichen Cursor liegt darin, dass für viele Anwendungen die Empfindlichkeit unwichtig ist. Besonders wenn Sie einen schreibgeschützten Vorwärts-Cursor verwenden, sind keine der darunter liegenden Änderungen sichtbar. Auch wenn Sie auf einer hohen Isolationsstufe ausführen, sind darunter liegende Änderungen nicht zulässig.
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 |