Ein Cursor ist eine auf dem DBMS-Server gespeicherte Datenbankabfrage. Es handelt sich nicht um eine SELECT-Anweisung, sondern um die von der Anweisung abgerufene Ergebnismenge. Nachdem der Cursor gespeichert wurde, kann die Anwendung nach Bedarf einen Bildlauf durchführen oder die darin enthaltenen Daten durchsuchen.
Cursor verwenden
Schritte zur Verwendung von Cursorn:
Bevor Sie einen Cursor verwenden, müssen Sie ihn deklarieren (definieren). Diese Prozedur ruft die Daten nicht wirklich ab, sondern definiert lediglich die zu verwendende SELECT-Anweisung und die Cursoroptionen.
Nach der Deklaration muss der Cursor zur Verwendung geöffnet werden. Dieser Prozess verwendet die zuvor definierte SELECT-Anweisung, um die Daten tatsächlich abzurufen.
Für einen mit Daten gefüllten Cursor rufen Sie nach Bedarf Zeilen ab.
Wenn Sie die Verwendung des Cursors beenden, müssen Sie den Cursor schließen und, wenn möglich, loslassen (abhängig vom jeweiligen DBMS).
Nachdem ein Cursor deklariert wurde, kann er beliebig oft geöffnet und geschlossen werden. Während der Cursor geöffnet ist, können Abrufvorgänge so oft wie nötig ausgeführt werden.
Erstellen Sie einen Cursor
Verwenden Sie DECLARE, um den Cursor in SQL Server zu benennen, und definieren Sie die entsprechende SELECT-Anweisung mit WHERE und anderen Klauseln nach Bedarf. Das Beispiel lautet wie folgt:
Der Code lautet wie folgt:
DECLARE CustCursor CURSOR FOR SELECT * FROM Customers WHERE cust_email IS NULL
Cursor verwenden
Verwenden Sie die OPEN CURSOR-Anweisung, um den Cursor zu öffnen, und verwenden Sie die FETCH-Anweisung, um auf die Cursordaten zuzugreifen. FETCH gibt an, welche Zeilen abgerufen werden sollen, wo sie abgerufen werden sollen und wo sie abgelegt werden sollen (als Variablennamen). Hier ist ein Beispiel für die Verwendung eines Cursors in SQL Server:
Der Code lautet wie folgt:
DECLARE @cust_id CHAR(10), @cust_name CHAR(50), @cust_address CHAR(50), @cust_city CHAR(50), @cust_state CHAR(5), @cust_zip CHAR(10), @cust_country CHAR(50), @cust_contact CHAR(50), @cust_email CHAR(255) OPEN CustCursor FETCH NEXT FROM CustCursor INTO @cust_id, @cust_name, @cust_address, @cust_city, @cust_state, @cust_zip, @cust_country, @cust_contact, @cust_email WHILE @@FETCH_STATUS = 0 BEGIN FETCH NEXT FROM CustCursor INTO @cust_id, @cust_name, @cust_address, @cust_city, @cust_state, @cust_zip, @cust_country, @cust_contact, @cust_email ... END CLOSE CustCursor
In diesem Beispiel wird für jede abgerufene Spalte eine Variable deklariert, und die FETCH-Anweisung ruft eine Zeile ab und speichert die Werte in diesen Variablen. Verwenden Sie eine WHILE-Schleife, um jede Zeile zu verarbeiten. Die Bedingung WHILE @@FETCH_STATUS = 0 beendet die Verarbeitung (beendet die Schleife), wenn keine weiteren Zeilen abgerufen werden können. In diesem Beispiel wird keine spezifische Verarbeitung durchgeführt. Im tatsächlichen Code sollte der Platzhalter ... durch spezifischen Verarbeitungscode ersetzt werden.
Cursor schließen
Cursor in SQL Server schließen:
Der Code lautet wie folgt:
CLOSE CustCursor DEALLOCATE CURSOR CustCursor
Die CLOSE-Anweisung wird zum Schließen verwendet den Cursor. Sobald der Cursor geschlossen ist, kann er nicht mehr verwendet werden, ohne ihn erneut zu öffnen. Wenn Sie es zum zweiten Mal verwenden, müssen Sie es nicht erneut deklarieren. Öffnen Sie es einfach mit OPEN.