MySQL Cursor Tutorial und Beispielcode

MySQL Cursor Tutorial und Beispielcode
In diesem Tutorial können Sie die Verwendung von MySQL Cursors in einem gespeicherten Verfahren, gespeicherten Funktionen oder Auslöser aus der Auswahlanweisung in einem gespeicherten Verfahren, gespeicherten Funktionen oder Auslöser erhalten.

In den meisten Fällen speichern wir bei der Ausführung von SQL -Abfragen mithilfe von MySQL Shell oder MySQL Workbench die Ergebnisse nicht, obwohl wir über die Funktionen verfügen, um die vom Server verarbeiteten Ergebnisse mithilfe einer gespeicherten Prozedur zu speichern.

In diesem Tutorial werde ich keine gespeicherten Verfahren, Funktionen oder Auslöser diskutieren. Stattdessen werde ich einfach dazu neigen, Ihnen zu zeigen, wie Sie mit MySQL Cursors die Ergebnisse in den gespeicherten Prozeduren ausführen können.

Bevor wir anfangen, einen Cursor mit Beispielen zu erstellen und zu verwenden, nehmen wir uns einen Moment Zeit, um ein paar wichtige Punkte über einen Cursor zu besprechen, den Sie kennen sollten:

Merkmale eines MySQL Cursors

  1. Ein Cursor ist schreibgeschützt und kann Daten im Ergebnis der Prozedur nicht aktualisieren oder entfernen.
  2. Ein Cursor muss deklariert werden, bevor er verwendet werden kann. Die Cursordefinition ist nur ein Schritt, um MySQL zu sagen, dass ein solcher Cursor existiert und keine Daten abzurufen und Daten.
  3. Sie können Daten nur in der Reihenfolge abrufen, die in der Auswahlanweisung angegeben ist, und nicht in einer umgekehrten Reihenfolge, die allgemein als nicht gesetzbar bezeichnet wird.
  4. Sie verwenden einen Cursor, indem Sie ihn öffnen und dann Abrufvorgänge für die gespeicherten Daten ausführen.
  5. Sie müssen einen Cursor nach Abschluss der Fetch -Operationen schließen.

Nachdem wir nun wissen, was ein Cursor bedeutet, können wir veranschaulichen, wie es mit Beispielen in der realen Welt funktioniert:

Grundnutzung

Die allgemeine Syntax, um einen Cursor in MySQL zu deklarieren, ist unkompliziert. Wir beginnen mit dem Declare -Schlüsselwort, wie in der folgenden Beispielabfrage gezeigt:

Wie man einen Cursor deklariert

Deklariere cursor_name cursor für select_expression;

Der Cursor_Name ist der Name, der dem Cursor während der Deklaration gegeben wurde. Beachten Sie, dass die Erklärung eines Cursors nach deklarierten Variablen erfolgen sollte, um zu verhindern, dass MySQL zu Fehlern führt.

Als nächstes befindet sich die Select_expression, die die mit dem Cursor zugeordnete SELECT -Anweisung speichert.

Wie man einen Cursor öffnet

Sobald wir einen Cursor deklariert haben und MySQL sich bewusst ist, dass der Cursor existiert, können wir anfangen, ihn zu verwenden, wodurch der Cursor geöffnet werden muss.

Die allgemeine Syntax zum Öffnen eines Cursors ist wie in der folgenden Abfrage gezeigt:

Öffnen cursor_name;

Dieser Befehl öffnet die von seinem Namen verwiesenen Cursors, und man kann damit beginnen.

So rufen Sie Daten ab

Mit dem Öffnen des Cursors können Sie die Informationen, die entweder in einer Prozedur, einer Funktion oder einem Auslöser gespeichert sind.

Die allgemeine Syntax zum Abrufen von Daten unter Verwendung eines Cursors ist wie gezeigt:

Fetch cursor_name in variablen;

NOTIZ: Stellen Sie, wie bereits erwähnt, sicher, dass der Cursor verwendet wird, nachdem die Variablen deklariert wurden, um Fehler zu vermeiden.

Wie man einen Cursor schließt und freigibt

Sobald die Operationen, die den definierten Cursor erfordern.

Sobald ein Cursor geschlossen wurde, muss ein Benutzer den Cursor mithilfe der offenen Schlüsselwörter (siehe oben) erneut eröffnen.

Sie müssen den Cursor nach der engen Erklärung nicht deklarieren.

Die allgemeine Syntax zum Schließen eines Cursors ist wie in der folgenden Abfrage gezeigt:

Cursor_Name schließen;

Fehlerbehandlung

MySQL Cursor funktioniert, indem die nächste Zeile im Ergebnissatz rekursiv gelesen wird. Wenn die nächste Zeile nicht verfügbar ist, schließt der Cursor die Daten, sofern nicht angegeben, sofern nicht angegeben. Dies kann ein Problem sein, insbesondere nachdem der Cursor das Ende des Ergebnisses erreicht hat.

Als Lösung wird ein nicht gefundener Handler definiert. Dies gibt an, dass die Maßnahmen ergriffen werden sollen, wenn die nächste Reihe nicht gefunden wird.

Die allgemeine Syntax für die Fehlerbehandlung bei der Verwendung eines Cursors lautet:

Declare Weitere Handler nicht gefundener Set terate = true;

Der Beendigungswert ist eine Variable, mit der angegeben wird, dass der Cursor das Ende des Ergebniss erreicht hat. Der Variablenname kann ein beliebiger Name sein, so lange er für die MySQL -Variable -Benennungskonvention passt.

NOTIZ: Wie alle Variablen, die in einem Cursor verwendet werden, muss es definiert werden, bevor es im Cursor verwendet wird.

Beispiel Anwendungsfall

Lassen Sie uns einen Cursor erstellen, der die in der Kundentabelle der Sakila -Beispieldatenbank verfügbaren Kunden -E -Mails sammelt.

Die Ressource zum Herunterladen und Installieren der Sakila -Datenbank finden Sie unten:

https: // dev.Mysql.com/doc/sakila/en/

Das Folgende zeigt eine Prozedur, bei der ein Cursor zum Abrufen von E -Mails verwendet wird:

Benutze Sakila;
Abgrenzer $$
Erstellen Sie die Prozedur createNewsletter (
E -Mails varchar (4000)
)
START
Deklarieren Sie int intault false;
Deklarieren Sie Emailaddr Varchar (255) Standard "";
Declare Collect_email Cursor für ausgewählte E -Mails von Sakila.Kunde WO (adress_id> 100 und address_id < 200);
Declare Weitere Handler für nicht gefundene Set terate = true;
Open Collect_Email;
Getemails: Schleife
Fetch Collect_Email in Emailaddr;
Wenn terate = true dann
Leave Getemails;
Ende wenn;
Setzen Sie E -Mails = concat (E -MailAddr, "|", E -Mails);
Endschleife Getemails;
Close Collect_Email;
Ende $$
Trennzeichen;
Set @emails = "";
Rufen Sie CreateNewSletter (@collect_email) an;
Wählen Sie @Collect_email;

Sobald die Abfrage ausgeführt wird, erhalten Sie eine Ausgabe, wie unten gezeigt:

Abschluss

In diesem Tutorial gingen wir mit den MySQL Cursors, um die im Ergebnismengen gespeicherten Daten zu analysieren. Betrachten Sie die Dokumentation, um die Implementierung der Cursors zu beherrschen.