Dieser Artikel veranschaulicht anhand von Beispielen die Prinzipien und die Verwendung von Cursorn (DECLARE) in gespeicherten MySQL-Prozeduren. Teilen Sie uns die Einzelheiten zu Ihrer Information mit: Wir können Cursor beim Verarbeiten von Ergebnismengen in gespeicherten Prozeduren verwenden, da Cursor es uns ermöglichen, über eine Reihe von Zeilen zu iterieren, die von einer Abfrage zurückgegeben werden, und jede Zeile entsprechend zu verarbeiten. Der MySQL-Cursor verfügt über drei Modi: schreibgeschützt, nicht scrollbar und sensitiv. Werfen wir einen Blick darauf:
Wir können MySQL-Cursor in gespeicherten Prozeduren, gespeicherten Funktionen und Triggern verwenden. Sehen wir uns zunächst die Syntax zum Deklarieren von Cursorn mit der Anweisung DECLARE an: DECLARE Cursorname CURSOR FÜR SELECT_Anweisung; Wir sollten beachten, dass die Cursordeklaration nach der Variablendeklaration stehen muss. Wenn Sie einen Cursor vor einer Variablendeklaration deklarieren, gibt MySQL einen Fehler aus. Außerdem muss ein Cursor immer mit einer SELECT-Anweisung verknüpft sein. Nachdem wir nun fertig sind, verwenden wir die OPEN-Anweisung, um den Cursor zu öffnen. Die OPEN-Anweisung initialisiert den Ergebnissatz eines Cursors. Daher müssen wir die OPEN-Anweisung aufrufen, bevor wir Zeilen aus dem Ergebnissatz abrufen: ÖFFNEN Cursorname; Anschließend verwenden wir die FETCH-Anweisung, um die nächste Zeile abzurufen, auf die der Cursor zeigt, und bewegen den Cursor zur nächsten Zeile im Ergebnissatz: FETCH Cursorname in Variablenliste; Danach können wir prüfen, ob ein Zeilendatensatz verfügbar ist und ihn dann abrufen. Denken Sie am Ende daran, die Anweisung CLOSE aufzurufen, um den Cursor zu deaktivieren und den damit verbundenen Speicher freizugeben: SCHLIESSEN Cursorname; Wir müssen wissen, dass der Cursor geschlossen werden soll, wenn er nicht mehr verwendet wird. Wenn wir MySQL-Cursor verwenden, müssen wir auch einen NOT FOUND-Handler deklarieren, um den Fall zu behandeln, wenn der Cursor keine Zeilen findet. Denn bei jedem Aufruf der FETCH-Anweisung versucht der Cursor, die nächste Zeile im Ergebnissatz zu lesen. Wenn der Cursor das Ende des Ergebnissatzes erreicht, können keine Daten abgerufen werden und es wird eine Bedingung generiert. Der NOT FOUND-Handler wird verwendet, um diese Situation zu bewältigen. Werfen wir einen Blick auf seine grammatische Struktur: DECLARE CONTINUE HANDLER FÜR NICHT GEFUNDENES SET, fertig = 1; „finished“ ist eine Variable, die angibt, dass der Cursor das Ende des Ergebnissatzes erreicht hat. Beachten Sie, dass die Handler-Deklaration nach den Variablen- und Cursor-Deklarationen in der gespeicherten Prozedur erscheinen muss. Werfen wir einen Blick auf das Funktionsprinzipdiagramm des MySQL-Cursors: Als Nächstes entwickeln wir eine gespeicherte Prozedur, um eine Liste der E-Mail-Adressen aller Mitarbeiter in der Mitarbeitertabelle zu erhalten. Beginnen wir mit der Deklaration einiger Variablen, eines Cursors zum Durchlaufen der Mitarbeiter-E-Mails und eines NOT FOUND-Handlers: DECLARE fertig INTEGER DEFAULT 0; DECLARE E-Mail varchar (255) DEFAULT ""; -- Cursor für Mitarbeiter-E-Mail deklarieren DEClARE email_cursor CURSOR FÜR WÄHLEN SIE E-Mails von Mitarbeitern aus; -- NOT FOUND-Handler deklarieren DECLARE-CONTINUE-HANDLER FÜR NICHT GEFUNDENES SET fertig = 1; Öffnen Sie als Nächstes „email_cursor“ mit der OPEN-Anweisung: ÖFFNEN Sie den E-Mail-Cursor. Iterieren Sie dann über die Liste der E-Mails und verketten Sie jede E-Mail mit dem Trennzeichen (;): get_email: SCHLEIFE FETCH email_cursor INTO v_email; WENN v_fertig = 1 DANN VERLASSEN Sie get_email; ENDE, WENN; --E-Mail-Liste erstellen SET E-Mail-Liste = CONCAT(v_email,";",E-Mail-Liste); ENDE DER SCHLEIFE get_email; Anschließend verwenden wir die Variable v_finished in der Schleife, um zu prüfen, ob sich E-Mails in der Liste befinden, um die Schleife zu beenden, und wenn wir fertig sind, schließen wir den Cursor mit der Anweisung CLOSE: SCHLIESSEN Sie email_cursor; Sehen wir uns den gesamten Code in der gespeicherten Prozedur build_email_list an: TRENNUNGSZEICHEN $$ ERSTELLEN SIE DAS VERFAHREN „build_email_list“ (INOUT „email_list“ varchar(4000)) BEGINNEN DECLARE v_finished INTEGER DEFAULT 0; DECLARE v_email varchar(100) DEFAULT ""; -- Cursor für Mitarbeiter-E-Mail deklarieren DEClARE email_cursor CURSOR FÜR WÄHLEN SIE E-Mails von Mitarbeitern aus; -- NOT FOUND-Handler deklarieren DECLARE-CONTINUE-HANDLER FÜR NICHT GEFUNDEN SET v_finished = 1; ÖFFNEN Sie den E-Mail-Cursor. get_email: SCHLEIFE FETCH email_cursor INTO v_email; WENN v_fertig = 1 DANN VERLASSEN Sie get_email; ENDE, WENN; --E-Mail-Liste erstellen SET E-Mail-Liste = CONCAT(v_email,";",E-Mail-Liste); ENDE DER SCHLEIFE get_email; SCHLIESSEN Sie email_cursor; ENDE$$ TRENNUNGSZEICHEN ; Testen wir die gespeicherte Prozedur build_email_list mit dem folgenden Skript: SETZEN Sie @email_list = ""; Rufen Sie build_email_list(@email_list) auf; Wählen Sie @email_list; Auf die Ergebnisse werde ich nicht näher eingehen. Leser, die an weiteren MySQL-bezogenen Inhalten interessiert sind, können sich die folgenden Themen auf dieser Site ansehen: „Kenntnisse zu gespeicherten MySQL-Prozeduren“, „Zusammenfassung der allgemeinen MySQL-Funktionen“, „Kenntnisse zu MySQL-Protokollvorgängen“, „Zusammenfassung der Kenntnisse zu MySQL-Transaktionsvorgängen“ und „Zusammenfassung der Kenntnisse zu MySQL-Datenbanksperren“. Ich hoffe, dass dieser Artikel für jedermann beim Entwurf einer MySQL-Datenbank hilfreich ist. Das könnte Sie auch interessieren:
|
<<: JavaScript zum Erzielen eines benutzerdefinierten Bildlaufleisteneffekts
>>: Grafisches Tutorial zur Installation von Tomcat8 auf einem Linux-System Centos7.X
html: Tatsächlich werden mehrere durchgezogene Kr...
Kurz gesagt, heute sprechen wir über die Verwendu...
1. Packen Sie das Java-Projekt in ein JAR-Paket H...
vue-cli verwendet stimulsoft.reports.js (Tutorial...
Ich möchte in meinem Unternehmen kürzlich einen H...
Offizielle Dokumentation: JSON-Funktionen Name Be...
Der Formularcode ist wie in der Abbildung dargest...
border-radius:10px; /* Alle Ecken sind mit einem ...
Anfänger können HTML lernen, indem sie einige HTM...
Inhaltsverzeichnis 1. Einige Punkte, die Sie beac...
Hinweis: sg11 Unser Unternehmen unterstützt nur d...
In Unternehmen hat die hohe Verfügbarkeit von Dat...
1. Wodurch wird die Geschwindigkeit der Datenbank...
Inhaltsverzeichnis 1. Ant Design Vue 1. Offiziell...
Inhaltsverzeichnis Überblick 1. Definieren Sie st...