[Verwendung und Funktion des MySQL-Cursors] Beispiel: Derzeit gibt es drei Tabellen A, B und C. A und B stehen in einer Eins-zu-viele-Beziehung und B und C stehen in einer Eins-zu-viele-Beziehung. Jetzt müssen Sie den Primärschlüssel von Tabelle A in B in Tabelle C speichern. 【Einführung】 Ein Cursor ist eigentlich ein Mechanismus, der aus einem Ergebnissatz, der mehrere Datensätze enthält, jeweils einen Datensatz extrahieren kann. Der Cursor fungiert als Zeiger. Obwohl ein Cursor alle Zeilen im Ergebnissatz durchlaufen kann, zeigt er immer nur auf eine Zeile gleichzeitig. Die Funktion des Cursors besteht darin, die von der Abfragedatenbank zurückgegebenen Datensätze zu durchlaufen, um entsprechende Vorgänge auszuführen. 【Verwendung】 1. Deklarieren Sie einen Cursor: Deklarieren Sie den Cursornamen CURSOR für die Tabelle; (die Tabelle kann hier jede von Ihnen abgefragte Sammlung sein) Hinweis: Jede Anweisung in der gespeicherten MySQL-Prozedur muss mit ; enden und die verwendeten temporären Felder müssen vor der Definition des Cursors deklariert werden. 【Beispiel】 - BEGINNEN --Definieren Sie Variablen, deklarieren Sie testrangeid BIGINT; Deklariere die Versions-ID BIGINT; deklariere erledigt int; --Cursor erstellen und Daten speichern, deklarieren Sie cur_test CURSOR für Wählen Sie die ID als Testbereichs-ID, die Versions-ID als Versions-ID von tp_testrange. --Nachdem der Inhalt im Cursor ausgeführt wurde, setzen Sie „done“ auf 1 DECLARE CONTINUE HANDLER FÜR NICHT GEFUNDENES SET, fertig=1; --Öffnen Sie den Cursor open cur_test; --Schleife ausführen posLoop:LOOP --Beurteilen Sie, ob die Schleife beendet werden soll, WENN fertig=1, DANN VERLASSEN Sie posLoop; ENDE, WENN; --Holen Sie sich den Wert im Cursor FETCH cur_test in testrangeid,versionid; --Aktualisierungsvorgang ausführen update tp_data_execute set version_id=versionid where testrange_id = testrangeid; ENDE DER SCHLEIFE posLoop; --Lassen Sie den Cursor los. CLOSE cur_test; ENDE - Beispiel 2: Wir werden jetzt eine gespeicherte Prozedur verwenden, um eine Funktion zu erstellen, die den Gesamtbestand an iPhones zählt und die Gesamtsumme an die Konsole ausgibt. --Wenn Sie beim Schreiben einer gespeicherten Prozedur in einem Windows-System eine Variable mit „declare“ deklarieren müssen, müssen Sie dieses Schlüsselwort hinzufügen, da sonst ein Fehler gemeldet wird. Trennzeichen // Löschprozedur, falls StatisticStore vorhanden ist; PROZEDUR ERSTELLEN StatisticStore() BEGINNEN --Erstellen Sie eine Variable zum Empfangen von Cursordaten. Deklarieren Sie c int. deklariere n varchar(20); --Erstellen Sie die Variable „total“ und deklarieren Sie „total int default 0“. --End-Flag-Variable erstellen, deklarieren „done“ int default false; --Erstellen Sie einen Cursor, deklarieren Sie den cur-Cursor für „Select Name, count from store“, wobei „Name = ‚iPhone‘“ ist; --Geben Sie den Rückgabewert am Ende der Cursorschleife an. Deklarieren Sie „continuum HANDLER“ für „nicht gefunden“, und setzen Sie „done“ = „true“. --Setzen Sie den Anfangswert „set total = 0“; --Öffnen Sie den Cursor open cur; --Starten Sie die Schleife über die Daten im Cursor read_loop:loop --hol cur in n,c ab, entsprechend den Daten, auf die der Cursor aktuell zeigt; --Beurteilen Sie, ob die Cursorschleife beendet ist, wenn sie fertig ist. read_loop verlassen; --Aus der Cursor-Schleife springen, end if; --Wenn Sie ein Datenelement erhalten, fügen Sie den Zählwert hinzu. Sie können hier tun, was Sie wollen. Setze Gesamtsumme = Gesamtsumme + c; --Beenden Sie die Cursorschleife, End-Loop; --Cursor schließen close cur; --Ausgabeergebnisse, Gesamtauswahl; ENDE; --Rufen Sie die gespeicherte Prozedur call StatisticStore(); auf. Fetch dient zum Abrufen der Datenzeile, auf die der Cursor aktuell zeigt, und zum Zeigen des Zeigers auf die nächste Zeile. Die Fortsetzung der Ausführung, wenn der Cursor bereits auf die letzte Zeile gezeigt hat, führt zu einem Überlauf des Cursors. read_loop:Schleife hole cur in n,c; setze Gesamtsumme = Gesamtsumme+c; Endschleife; Wenn in MySql ein Cursorüberlauf auftritt, wird der vordefinierte MySQL-Fehler NOT FOUND ausgelöst. Daher wird der folgende Code oben verwendet, um ein Fortsetzungsereignis zu definieren, wenn ein Fehler NOT FOUND ausgelöst wird, und um anzugeben, dass der Wert der Variable done geändert wird, wenn dieses Ereignis eintritt. Deklarieren Sie den Continue-HANDLER für nicht gefundenen Satz „Done“ = „true“. Daher habe ich der Schleife den folgenden Code hinzugefügt: --Beurteilen Sie, ob die Cursorschleife beendet ist, wenn sie fertig ist. read_loop verlassen; --Aus der Cursor-Schleife springen, end if; Wenn der Wert von done true ist, endet die Schleife. Führen Sie den folgenden Code weiter aus Anwendung Es gibt drei Möglichkeiten, Cursor zu verwenden: Löschprozedur, falls StatisticStore1 vorhanden ist; PROZEDUR ERSTELLEN StatisticStore1() BEGINNEN Deklariere c int; deklariere n varchar(20); Deklarieren Sie den Gesamtint-Standardwert 0. Deklarieren Sie „done“ als „int default false“. Deklarieren Sie den aktuellen Cursor, um den Namen auszuwählen und aus dem Store zu zählen, wobei Name = „iPhone“ ist. Deklarieren Sie den Continue-HANDLER für nicht gefundenen Satz „Done“ = „true“. Setze Gesamtsumme = 0; offenes Köcher; hole cur in n,c; während(nicht erledigt) tun Setze Gesamtsumme = Gesamtsumme + c; hole cur in n,c; Ende während; enger Köter; Gesamtsumme auswählen; ENDE; rufen Sie StatisticStore1() auf; Die dritte Möglichkeit besteht in der wiederholten Ausführung: Löschprozedur, falls StatisticStore2 vorhanden ist; PROZEDUR ERSTELLEN StatisticStore2() BEGINNEN Deklariere c int; deklariere n varchar(20); Deklarieren Sie den Gesamtint-Standardwert 0. Deklarieren Sie „done“ als „int default false“. Deklarieren Sie den aktuellen Cursor, um den Namen auszuwählen und aus dem Store zu zählen, wobei Name = „iPhone“ ist. Deklarieren Sie den Continue-HANDLER für nicht gefundenen Satz „Done“ = „true“. Setze Gesamtsumme = 0; offenes Köcher; wiederholen hole cur in n,c; wenn nicht getan, dann Setze Gesamtsumme = Gesamtsumme + c; Ende wenn; bis es fertig ist, wiederholen; enger Köter; Gesamtsumme auswählen; ENDE; rufen Sie StatisticStore2() auf; Verschachtelte Cursor In MySQL ist jeder Anfangs- und Endblock ein unabhängiger Bereich. Da dasselbe Fehlerereignis in MySQL nur einmal definiert werden kann, wird bei mehrmaliger Definition während der Kompilierung ein im selben Block deklarierter Duplikathandler angezeigt. Löschprozedur, falls StatisticStore3 vorhanden ist; PROZEDUR ERSTELLEN StatisticStore3() BEGINNEN deklarieren Sie _n varchar(20); Deklarieren Sie „done“ als „int default false“. Deklarieren Sie den aktuellen Cursor, um den Namen aus der Store-Gruppe nach Namen auszuwählen. Deklarieren Sie den Continue-HANDLER für nicht gefundenen Satz „Done“ = „true“. offenes Köcher; read_loop:Schleife hol cur in _n; wenn fertig dann verlasse read_loop; Ende wenn; beginnen Deklariere c int; deklariere n varchar(20); Deklarieren Sie den Gesamtint-Standardwert 0. Deklarieren Sie „done“ als „int default false“. Deklarieren Sie den aktuellen Cursor, um den Namen auszuwählen und aus dem Store zu zählen, wobei Name = „iPhone“ ist. Deklarieren Sie den Continue-HANDLER für nicht gefundenen Satz „Done“ = „true“. Setze Gesamtsumme = 0; offenes Köcher; iphone_loop:Schleife hole cur in n,c; wenn fertig dann verlasse iphone_loop; Ende wenn; Setze Gesamtsumme = Gesamtsumme + c; Endschleife; enger Köter; wähle _n,n,gesamt; Ende; beginnen Deklariere c int; deklariere n varchar(20); Deklarieren Sie den Gesamtint-Standardwert 0. Deklarieren Sie „done“ als „int default false“. Deklarieren Sie den aktuellen Cursor für die Auswahl des Namens, zählen Sie aus dem Store, wobei Name = „Android“ ist; Deklarieren Sie den Continue-HANDLER für nicht gefundenen Satz „Done“ = „true“. Setze Gesamtsumme = 0; offenes Köcher; android_loop:Schleife hole cur in n,c; wenn fertig dann verlasse android_loop; Ende wenn; Setze Gesamtsumme = Gesamtsumme + c; Endschleife; enger Köter; wähle _n,n,gesamt; Ende; beginnen Ende; Endschleife; enger Köter; ENDE; rufen Sie StatisticStore3() auf; Das Obige dient der Implementierung einer verschachtelten Schleife, natürlich ist dieses Beispiel weit hergeholt. Schauen Sie es sich jetzt einfach einmal an. Dynamisches SQL MySQL unterstützt dynamische SQL-Funktionen Setzen Sie @sqlStr='select * from table where condition1 = ?'; bereiten Sie s1 für @sqlStr vor; --Wenn mehrere Parameter vorhanden sind, trennen Sie diese durch Kommas. Führen Sie s1 mit @condition1 aus. --Manuelle Freigabe, oder wenn die Verbindung geschlossen wird, recycelt der Server automatisch die Freigabe und bereitet s1 vor. Oben finden Sie eine ausführliche Erläuterung des MySQL-Cursors. Weitere Informationen zum MySQL-Cursor finden Sie in den anderen verwandten Artikeln auf 123WORDPRESS.COM! Das könnte Sie auch interessieren:
|
>>: Vue implementiert Funktionen zum Hoch- und Herunterladen von Dateien
Inhaltsverzeichnis Drosselung und Anti-Shake Konz...
Inhaltsverzeichnis 1. Einführung in import_table ...
1. Einführung in Layer 4 Load Balancing Was ist L...
Der Code demonstriert die horizontale Zusammenfüh...
Probieren wir hier den Reverse-Proxy von Nginx au...
Frage Die Angabe des Typs der hochgeladenen Datei...
Das CSS-Positionsattribut gibt den Positionierung...
In diesem Artikelbeispiel wird der spezifische Co...
Inhaltsverzeichnis 1. Was zu debuggen ist 2. Funk...
Inhaltsverzeichnis 1. Implementieren Sie die Komp...
Inhaltsverzeichnis Stapelkopie copyWithin() Array...
1 Problembeschreibung Dieser Artikel sortiert den...
Inhaltsverzeichnis Ref und Reaktiv Referenz Reakt...
In einigen Fällen müssen die Daten in den Daten w...
Vorwort MySQL ist eine relationale Datenbank mit ...