Einführung in Cursors in SQL

Cursor sind temporäre Arbeitsbereiche, die im Speicher erstellt werden, um einige SQL-Befehle für eine Reihe von Daten zu verarbeiten. Zu komplizierte Definition? Lass es uns verstehen. Stellen Sie sich die Cursor für jede Schleife in SQL vor. Wenn Sie eine Aufgabe für eine Reihe von Datenzeilen ausführen möchten, verwenden Sie den Cursor. Angenommen, Sie haben eine Mitarbeitertabelle, die das Gehalt für jeden Mitarbeiter der Organisation enthält. Sie möchten das Gehalt jedes Mitarbeiters um einen bestimmten Prozentsatz erhöhen. Hier würden Sie einen Cursor verwenden. 'Das Wie' wurde später in diesem Artikel illustriert.

Cursor erstellen also einen temporären Arbeitsbereich mit der ausgewählten Reihe von Zeilen und einem Zeiger, der auf die aktuelle Zeile zeigt. Diese Reihe von Zeilen, auf denen der Cursor die gewünschte Operation ausführt, wird als aktiver Datensatz bezeichnet. Der Zeiger ruft die Zeilen einzeln aus der Ergebnismenge ab. Sie können dann jede SQL-Operation zeilenweise ausführen.

Implizite Cursor

Implizite Cursor werden, wie der Name schon sagt, vom SQL-Parser für DML-Abfragen generiert. DML-Abfragen sind Datenmanipulationsabfragen. Diese Abfragen manipulieren oder ändern die Daten. Sie beeinträchtigen weder die Struktur noch das Schema der Datenbank. Abfragen wie SELECT, INSERT, UPDATE und DELETE generieren einen impliziten Cursor. Implizite Cursor sind für den Endbenutzer verborgen.

Explizite Cursor

Explizite Cursor sind benutzergenerierte Cursor. Wenn ein Benutzer den SQL-Parser anweist, einen Cursor für eine aktive Menge zu erstellen, wird der so erstellte Cursor als expliziter Cursor bezeichnet. Die aktive Menge wird durch eine SELECT-Abfrage vom Benutzer definiert. In diesem Artikel werden wir ausführlich auf explizite Cursor eingehen.

Cursoraktionen - Der Lebenszyklus eines Cursors

Der Lebenszyklus eines Cursors umfasst normalerweise fünf Phasen:

1. Deklarieren: Der erste Schritt besteht darin, einen Cursor zu deklarieren. Dieser Schritt weist das System an, einen Cursor mit dem angegebenen Datensatz zu generieren. Der Datensatz wird mithilfe einer SQL-Anweisung erstellt. Zu diesem Zeitpunkt wird der aktive Satz erstellt, aber der temporäre Arbeitsbereich des Cursors ist noch nicht im Speicher geöffnet.

2. Öffnen: Als nächstes wird das System angewiesen, den Cursor zu öffnen. In diesem Stadium wird der temporäre Arbeitsbereich mit der aktiven Menge in den Speicher geladen und ein Zeiger erzeugt, der auf die erste Reihe in der aktiven Menge zeigt.

3. Holen: Dies ist der wiederkehrende Schritt im gesamten Prozess. Die aktuelle Zeile, auf die der Zeiger zeigt, wird abgerufen, und die gewünschte Aufgabe wird an den Zeilendaten ausgeführt. Der Zeiger bewegt sich zur nächsten Zeile im Cursor.

4. Schließen: Nach der Datenbearbeitung muss der Cursor geschlossen werden.

5. Freigabe: Dies ist der letzte Schritt, um den Cursor zu löschen und den dem Cursor zugewiesenen Speicher, Prozessor und andere Systemressourcen freizugeben.

Explizite Cursor - In Aktion!

Okay, jetzt haben wir ein grundlegendes Verständnis dafür, was Cursor sind und wie sie funktionieren. Es ist an der Zeit, uns die Hände schmutzig zu machen und selbst einen expliziten Cursor zu erstellen.

Die Terminologie der Cursor in SQL

Lassen Sie uns die in dieser Syntax verwendeten Terminologien verstehen.

Cursor-Bereich

  • Der Cursorbereich kann entweder GLOBAL oder LOCAL sein . Während der gesamten Verbindung ist ein globaler Cursor verfügbar. Ein lokaler Cursor ist nur auf die gespeicherten Prozeduren, Funktionen oder die Abfrage beschränkt, die den Cursor enthält.
  • Dies ist die MS SQL Server-spezifische Funktion. MySQL unterstützt nur lokale Cursor.

Cursorbewegung

  • MS SQL Server bietet auch die Möglichkeit, die Cursorbewegung festzulegen. Dies kann entweder der herkömmliche Forward_Only-Modus sein, der den Zeiger zeilenweise von der ersten bis zur letzten Zeile bewegt. Oder es kann in die erste, letzte, vorherige oder nächste Zeile gescrollt werden.
  • Cursor in MySQL können nicht gescrollt werden.

Cursortyp

  • Ein Cursor kann statisch sein, da er den aktiven Satz bis zur Freigabe zwischenspeichern und durch diesen zwischengespeicherten aktiven Satz vorwärts und rückwärts jonglieren kann. Ein Cursor kann nur im statischen Modus vorspulen.
  • Es kann auch dynamisch sein, das Hinzufügen oder Löschen von Zeilen in der aktiven Gruppe zuzulassen, während der Cursor geöffnet ist. Diese Änderungen sind für andere Benutzer des Cursors im Keyset-Modus nicht sichtbar. Cursor in MySQL sind nur für den schnellen Vorlauf vorgesehen.

Cursorsperre

  • Cursorsperren sind in einer Mehrbenutzerumgebung hilfreich. Sie sperren die Zeile, sodass keine zwei Benutzer gleichzeitig mit denselben Daten arbeiten. Dies stellt die Datenintegrität sicher.
  • Eine schreibgeschützte Sperre besagt, dass die Zeile nicht aktualisiert werden kann.
  • Bildlaufsperren sperren die Zeile, wenn sie im Cursor abgerufen werden, um sicherzustellen, dass die Aufgabe erfolgreich ist und aktualisierte Daten außerhalb des Cursors verfügbar sind. Optimistische Versuche, die Zeile ohne Sperre zu aktualisieren. Wenn also die Zeile außerhalb des Cursors aktualisiert wurde, ist die Aufgabe nicht erfolgreich.
  • MySQL unterstützt nur schreibgeschützte Sperren. Dies bedeutet, dass MySQL die eigentliche Tabelle nicht aktualisiert, sondern die Daten kopiert, um Aktualisierungsbefehle auszuführen.

Daher sehen wir, dass diese Optionen nur in MS SQL Server verfügbar sind. Dies macht die Syntax für MySQL-Cursor noch einfacher.

Beispiel

Lassen Sie uns jetzt das Gehalt der Mitarbeiter in unserer Mitarbeitertabelle aktualisieren.

Wir würden die folgenden Daten in diesen Cursorn in einem SQL-Beispiel verwenden.

Unser Cursor-Code wäre wie folgt:

DECLARE @sal float
DECLARE @newsal float
DECLARE Emp_Cur CURSOR FOR SELECT Salary, Updated_Salary FROM Employees
OPEN Emp_Cur
FETCH NEXT FROM Emp_Cur INTO @sal, @newsal
WHILE @@FETCH_STATUS = 0
BEGIN
SET @newsal = @sal*1.25
UPDATE Employees SET Updated_Salary = @newsal WHERE CURRENT OF Emp_Cur
FETCH NEXT FROM Emp_Cur INTO @sal, @newsal
END
CLOSE Emp_Cur
DEALLOCATE Emp_Cur

Und die Ausgabe nach Ausführung des obigen Cursorbefehls wäre:

Fazit - Cursor in SQL

So haben wir gesehen, was Cursor sind, wie man sie benutzt und wo man sie vermeidet. Cursor erweisen sich als hilfreiches Hilfsprogramm für Entwickler, jedoch auf Kosten der Leistung. Seien Sie also vorsichtig, wenn Sie sich für Cursor entscheiden.

Empfohlene Artikel

Dies ist eine Anleitung zu Cursorn in SQL. Hier werden die Typen, der Lebenszyklus und die Terminologie des Cursors in SQL anhand von Beispielen erläutert. Sie können auch unsere anderen Artikelvorschläge durchgehen -

  1. Arten von Joins in SQL
  2. SQL-Änderungsbefehl
  3. SQL-Ansichten
  4. SQL-Verwaltungstools
  5. Arten von Cursorn in PL / SQL
  6. Top 6 Arten von Joins in MySQL mit Beispielen