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 » Mit Cursor arbeiten

 

Zeilen mit einen Cursor ändern

Cursor können mehr als nur Ergebnisse aus einer Abfrage lesen. Sie können auch Daten in der Datenbank verändern, während Sie einen Cursor verarbeiten. Diese Vorgänge werden im Allgemeinen als positionsbasierte oder positionierte Einfügungs-, Aktualisierungs- und Löschvorgänge oder PUT-Vorgänge (wenn es sich um ein INSERT handelt) bezeichnet.

Nicht alle Abfrage-Ergebnismengen ermöglichen positionsbasiertes Aktualisieren oder Löschen. Wenn Sie eine Abfrage in einer nicht aktualisierbaren Ansicht ausführen, werden in den Basistabellen keine Änderungen durchgeführt. Auch wenn die Abfrage einen Join enthält, müssen Sie angeben, aus welcher Tabelle Sie löschen wollen oder welche Spalten Sie aktualisieren wollen, wenn Sie die Vorgänge ausführen.

Einfügungen durch einen Cursor können nur durchgeführt werden, wenn nicht eingefügte Spalten in der Tabelle NULL zulassen oder Standardwerte haben.

Wenn meherere Zeilen in einen wertsensitiven (Keyset-gesteuerten) Cursor eingefügt werden, erscheinen sie am Ende der Cursor-Ergebnismenge. Die Zeilen werden am Ende angezeigt, auch wenn sie nicht mit der WHERE-Klausel der Abfrage übereinstimmen oder eine ORDER BY-Klausel sie normalerweise an eine andere Stelle in der Ergebnismenge gesetzt hätte. Dieses Verhalten ist von der Programmierschnittstelle unabhängig. Beispielsweise gilt dies, wenn Sie die PUT-Anweisung aus Embedded SQL oder die ODBC-Funktion SQLBulkOperations verwenden. Der Wert einer autoinkrementierenden Spalte für die zuletzt eingefügte Zeile kann gefunden werden, indem Sie die letzte Zeile im Cursor auswählen. Beispiel: In Embedded SQL kann der Wert mit FETCH ABSOLUTE -1 Cursorname ermittelt werden. Als Folge dieses Verhaltens kann die erste Einfügung mit mehreren Zeilen für einen wertsensitiven Cursor teuer sein.

ODBC, JCBC, Embedded SQL und Open Client ermöglichen die Datenänderung mit einem Cursor, ADO.NET hingegen nicht. Mit dem Open Client können Sie Zeilen löschen und aktualisieren, aber Zeilen nur in einer Ein-Tabellenabfrage einfügen.

Aus welcher Tabelle werden Zeilen gelöscht?

Wenn Sie ein positionsbasiertes Löschen durch einen Cursor versuchen, wird die Tabelle, aus der Zeilen gelöscht werden, wie folgt festgelegt:

  1. Wenn keine FROM-Klausel in der DELETE-Anweisung eingeschlossen ist, muss der Cursor nur für eine Tabelle gesetzt sein.

  2. Wenn der Cursor für eine Join-Abfrage (einschließlich zum Benutzen einer Ansicht mit enthaltenem Join) gesetzt ist, muss die FROM-Klausel verwendet werden. Nur die aktuelle Zeile der angegebenen Tabelle wird gelöscht. Die anderen Tabellen des Joins sind nicht betroffen.

  3. Wenn eine FROM-Klausel enthalten ist und kein Tabelleneigentümer angegeben wurde, ist der Tabellenangabewert der erste, der zu den Korrelationsnamen passt. Weitere Hinweise finden Sie unter FROM-Klausel.

  4. Wenn ein Korrelationsname existiert, ist der Tabellenangabename mit dem Korrelationsnamen identifiziert.

  5. Wenn ein Korrelationsname nicht vorhanden ist, muss der Tabellenangabewert eindeutig als Tabellenname im Cursor identifizierbar sein.

  6. Wenn eine FROM-Klausel enthalten ist und ein Tabelleneigentümer angegeben wurde, muss der Tabellenangabewert als Tabellenname im Cursor eindeutig identifizierbar sein.

  7. Die positionsbasierte DELETE-Anweisung kann für einen Cursor verwendet werden, der für eine Ansicht geöffnet ist, solange die Ansicht aktualisierbar ist.