Erstellen eines CursorsErstellen Sie zunächst eine Datentabelle in MySql: Tabelle erstellen, wenn nicht vorhanden `store` ( `id` int(11) NICHT NULL AUTO_INCREMENT, `name` varchar(20) NICHT NULL, `count` int(11) NICHT NULL STANDARD '1', PRIMÄRSCHLÜSSEL (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=7; INSERT INTO `store` (`id`, `name`, `count`) WERTE (1, 'Android', 15), (2, 'iphone', 14), (3, 'iphone', 20), (4, 'Android', 5), (5, 'Android', 13), (6, 'iPhone', 13); 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 dies der Fall ist. read_loop verlassen; --Aus der Cursor-Schleife springen, Ende, wenn; --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. Fahren Sie mit der Ausführung des folgenden Codes fort. 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 CursorIn 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 SQLMysql 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 ausführliche Informationen zur Definition und Verwendung des MySQL-Cursors. Weitere Informationen zum MySQL-Cursor finden Sie in den anderen verwandten Artikeln auf 123WORDPRESS.COM! Das könnte Sie auch interessieren:
|
<<: Auszeichnungssprache - Liste
>>: Reine CSS-Implementierung eines Radio- und Checkbox-Effektbeispiels
MYSQL 5.6 Bereitstellung und Überwachung der Slav...
Inhaltsverzeichnis 1. Global vor jedem 1. Global ...
Das Installations-Tutorial für die dekomprimierte...
1. Suchen Sie zunächst die Datendatei auf dem Mig...
erreichen Dieser Effekt lässt sich mit CSS nur sc...
Der Code sieht folgendermaßen aus: .Verfahren{ Ra...
Einführung in Textschatten Verwenden Sie in CSS d...
Vorwort Das ursprüngliche Projekt wurde im öffent...
[LeetCode] 185. Die drei höchsten Gehälter der Ab...
Über die ungültige Zeilenhöheneinstellung in CSS ...
Inhaltsverzeichnis 1. Was ist ein regulärer Ausdr...
Inhaltsverzeichnis Abhängigkeiten installieren Ko...
„Weniger ist mehr“ ist ein Schlagwort vieler Desi...
Ja, gespeicherte MySQL-Prozeduren scheinen sehr s...
Dieser Artikel zeichnet das Linux-Tutorial zur In...