Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 11.0.1 (Deutsch) » SQL Anywhere Server - Programmierung » Einführung in die Programmierung mit SQL Anywhere » SQL in Anwendungen verwenden » SQL Anywhere-Cursor

 

Empfindliche Cursor

Empfindliche Cursor können für schreibgeschützte oder aktualisierbare Cursortypen verwendet werden.

Diese Cursor haben empfindliche Mitgliedschaft, Reihenfolge und Werte.

Standards

Empfindliche Cursor entsprechen der ISO/ANSI-Standarddefinition von empfindlichen Cursor beziehungsweise den dynamischen ODBC-Cursor.

Programmierschnittstellen
Schnittstelle Cursortyp Kommentar
ODBC, ADO/OLE DB Dynamic
Embedded SQL SENSITIVE Wird auch als Antwort auf eine Anfrage nach einem DYNAMIC SCROLL-Cursor geliefert, wenn keine Arbeitstabelle erforderlich und die Prefetch-Option auf OFF eingestellt ist.
JDBC SENSITIVE Empfindliche Cursor werden vom iAnywhere JDBC-Treiber voll unterstützt.
Beschreibung

Prefetch-Vorgänge sind für empfindliche Cursor deaktiviert. Alle Änderungen sind durch den Cursor sichtbar, sowohl die Änderungen durch den Cursor als auch die durch andere Transaktionen. Höhere Isolationsstufen können aufgrund von Sperren manche Änderungen verbergen, die von anderen Transaktionen durchgeführt werden.

Alle Änderungen von Mitgliedschaft, Reihenfolge und Spaltenwerten des Cursors sind sichtbar. Beispiel: Wenn ein empfindlicher Cursor einen Join enthält und einer der Werte von einer der darunter liegenden Tabellen geändert wird, dann zeigen alle Ergebniszeilen, die aus dieser Basiszeile zusammengesetzt sind, den neuen Wert. Die Mitgliedschaft und Reihenfolge der Ergebnismenge können sich bei jedem Abruf ändern.

Empfindliche Cursor geben immer Zeilen zurück, die den Auswahlkriterien der Abfrage entsprechen, und zwar in der durch eine ORDER BY-Klausel festgelegten Reihenfolge. Aktualisierungen können sich auf die Mitgliedschaft, Reihenfolge und Werte der Ergebnismenge auswirken.

Die Anforderungen von empfindlichen Cursor bewirken bei der Implementierung von empfindlichen Cursor folgende Einschränkungen:

  • Zeilen können nicht vorab abgerufen werden, weil die Änderungen an solchen Zeilen durch den Cursor nicht sichtbar wären. Das kann sich auf die Performance auswirken.

  • Empfindliche Cursor müssen so implementiert werden, dass keine Arbeitstabellen zusammengestellt werden, weil Änderungen an den in der Arbeitstabelle gespeicherten Zeilen durch den Cursor nicht sichtbar wären.

  • Die Bedingung, keine Arbeitstabelle zu verwenden, schränkt die Auswahl der Join-Methode durch den Optimierer ein und kann sich daher auf die Performance auswirken.

  • Bei einigen Abfragen ist es unvermeidlich, dass der Optimierer einen Plan erstellt, der eine Arbeitstabelle enthält, und somit keinen empfindlichen Cursor erlaubt.

    Arbeitstabellen werden üblicherweise zum Sortieren und Gruppieren von Zwischenergebnissen verwendet. Eine Arbeitstabelle ist zum Sortieren nicht erforderlich, wenn auf die Zeilen durch einen Index zugegriffen werden kann. Es ist nicht immer möglich vorherzusagen, welche Abfragen Arbeitstabellen verwenden, aber sie werden von folgenden Abfragen verwendet:

    • UNION-Abfragen, auch wenn UNION ALL-Abfragen nicht unbedingt Arbeitstabellen verwenden.

    • Anweisungen mit einer ORDER BY-Klausel, wenn es keinen Index auf der ORDER BY-Spalte gibt.

    • Jede Abfrage, die mit einem Hash-Join optimiert ist.

    • Viele Abfragen, die DISTINCT- oder GROUP BY-Klauseln betreffen.

    In diesen Fällen gibt SQL Anywhere entweder eine Fehlermeldung an die Anwendung zurück, oder der Cursortyp wird in einen nicht-empfindlichen Cursor geändert und eine Warnmeldung ausgegeben.

    Weitere Hinweise zur Abfragenoptimierung und Verwendung von Arbeitstabellen finden Sie unter Abfragen optimieren und ausführen.