Dieser Artikel veranschaulicht anhand eines Beispiels die Verwendung der Case-Anweisung in gespeicherten MySQL-Prozeduren. Teilen Sie uns die Einzelheiten zu Ihrer Information mit: Zusätzlich zur if-Anweisung bietet MySQL eine alternative bedingte Anweisung CASE. Die CASE-Anweisung von MySQL macht den Code lesbarer und effizienter. Schauen wir uns ohne weitere Umschweife die Syntax einer einfachen Case-Anweisung an: CASE Fallausdruck WANN when_expression_1 DANN Befehle WANN when_expression_2 DANN Befehle ... ELSE-Befehle FALLENDE; Wir können eine einfache CASE-Anweisung verwenden, um zu prüfen, ob der Wert eines Ausdrucks mit einer Reihe eindeutiger Werte übereinstimmt. Im obigen SQL kann case_expression jeder gültige Ausdruck sein. Wir vergleichen den Wert von case_expression mit dem when_expression in jeder WHEN-Klausel, beispielsweise when_expression_1, when_expression_2 usw. Wenn die Werte von case_expression und when_expression_n gleich sind, werden die Befehle im entsprechenden WHEN-Zweig ausgeführt. Wenn der when_expression in der WHEN-Klausel mit dem Wert des case_expression übereinstimmt, werden die Befehle in der ELSE-Klausel ausgeführt. Die ELSE-Klausel ist optional. Wenn wir die ELSE-Klausel weglassen und keine Übereinstimmung gefunden wird, gibt MySQL einen Fehler aus. Sehen wir uns ein Beispiel mit einer einfachen CASE-Anweisung an: TRENNUNGSZEICHEN $$ PROZEDUR ERSTELLEN GetCustomerShipping( in p_customerNumber int(11), out p_shiping varchar(50)) BEGINNEN DECLARE KundeLand varchar(50); Wählen Sie Land in Kundenland aus. VON Kunden WO Kundennummer = p_Kundennummer; CASE KundeLand WENN 'USA' DANN SET p_shiping = '2-Tage-Versand'; WENN 'KANADA' DANN SET p_shiping = '3-Tage-Versand'; ANDERS SET p_shiping = '5-Tage-Versand'; FALLENDE; ENDE$$ Das obige SQL funktioniert folgendermaßen:
Schauen wir uns das Flussdiagramm der Logik zur Bestimmung des Versandzeitpunkts an: Das Folgende ist das Testskript für die oben gespeicherte Prozedur: SET @Kundennummer = 112; Wählen Sie Land in @country aus VON Kunden WO Kundennummer = @Kundennr; Rufen Sie GetCustomerShipping (@Kundennummer, @Versand) auf. Wählen Sie @customerNo AS Kunde, @country ALS Land, @Versand als Versand; Führen Sie den obigen Code aus und erhalten Sie die folgenden Ergebnisse:
Mit der einfachen CASE-Anweisung können wir den Wert eines Ausdrucks mit einer Reihe unterschiedlicher Werte abgleichen. Um komplexere Übereinstimmungen, wie etwa Bereiche, durchzuführen, können wir eine durchsuchbare CASE-Anweisung verwenden. Die durchsuchbare CASE-Anweisung entspricht der IF-Anweisung, ist aber lesbarer aufgebaut. Werfen wir einen Blick auf die grammatische Struktur: FALL Wenn Bedingung_1, dann Befehle Wenn Bedingung_2, dann Befehle ... ELSE-Befehle FALLENDE; Das obige SQL wertet zuerst jede Bedingung in der WHEN-Klausel aus, bis eine Bedingung mit dem Wert TRUE gefunden wird, und führt dann die entsprechenden Befehle in der THEN-Klausel aus. Wenn keine der Bedingungen WAHR ist, werden die Befehle in der ELSE-Klausel ausgeführt. Wenn Sie keine ELSE-Klausel angeben und keine der Bedingungen als TRUE ausgewertet wird, gibt MySQL eine Fehlermeldung aus. MySQL erlaubt keinen leeren Befehl in einer THEN- oder ELSE-Klausel. Wenn wir die Logik in der ELSE-Klausel nicht verarbeiten und gleichzeitig verhindern möchten, dass MySQL einen Fehler ausgibt, können wir einen leeren BEGIN END-Block in die ELSE-Klausel einfügen. Sehen wir uns ein Beispiel für die Verwendung einer durchsuchbaren CASE-Anweisung an, um Kunden mit dem Kreditlimit SILBER, GOLD oder PLATIN zu finden: TRENNUNGSZEICHEN $$ PROZEDUR ERSTELLEN GetCustomerLevel( in p_customerNumber int(11), aus p_customerLevel varchar(10)) BEGINNEN DECLARE Kreditlim doppelt; SELECT Kreditlimit INTO Kreditlimit VON Kunden WO Kundennummer = p_Kundennummer; FALL WENN creditlim > 50000 DANN SETZEN Sie p_customerLevel = "PLATINUM"; WENN (creditlim <= 50000 UND creditlim >= 10000) DANN SET p_customerLevel = 'GOLD'; WENN Kreditlimit < 10000 DANN SET p_customerLevel = 'SILBER'; FALLENDE; ENDE$$ Wenn in der obigen Abfragelogik das Kreditlimit beträgt:
Wir können die gespeicherte Prozedur testen, indem wir das folgende Testskript ausführen: Rufen Sie GetCustomerLevel(112,@level) auf; SELECT @level AS 'Kundenebene'; Führen Sie die obige Abfrageanweisung aus und erhalten Sie die folgenden Ergebnisse:
Okay, das ist alles zu diesem Teilen. 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:
|
<<: Detaillierte Erklärung des Parsererror-Fehlerfalls in der JavaScript-Lösung in Ajax
>>: So ändern Sie die Apt-Get-Quelle in Ubuntu 18.04
In dieser Lesenotiz werden hauptsächlich die Vorg...
Inhaltsverzeichnis 1. Rezeptsammlung 1.1 Projekth...
Stilvorlagen CSS (Cascading Style Sheets) wird zu...
Um das Problem „Eingeben != Absenden“ zu implement...
Als Open-Source-Software ist Apache eine der am h...
In diesem Artikelbeispiel wird der spezifische Ja...
Inhaltsverzeichnis Vorwort Was ist VueUse Einfach...
Dieser Artikel beschreibt die MySQL-Einzeltabelle...
Async Hooks ist eine neue Funktion von Node8. Sie...
In diesem Artikel wird der spezifische Prozess zu...
Ein Stylesheet beschreibt, wie ein Dokument angez...
Inhaltsverzeichnis DragEvent-Schnittstelle Übersi...
1. Wie oben erwähnt Ich habe dieses Makro gesehen...
Hinweis: Wenn der Artikel Fehler enthält, hinterl...
Vorwort: MySQL ist ein relationales Datenbankverw...