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
Der spezifische Code der JavaScript-Datumseffekte...
Vorwort Dieser Artikel stellt hauptsächlich die d...
Inhaltsverzeichnis 1.DB, DBMS, SQL 2. Eigenschaft...
<br />Als sich das Denken in Ost und West sp...
Methode 1: Verwenden Sie den Befehl SET PASSWORD ...
1. Schauen Sie sich zunächst die Anforderungskonf...
Standardmäßig unterscheidet MySQL unter Linux zwi...
Einige Fehlercodetabellen verwenden aus historisc...
In diesem Abschnitt beschreibt der Autor die spez...
Inhaltsverzeichnis Vorwort 1. Grundkenntnisse zu ...
Nachdem die Quelle des Iframes auf „about:blank“ g...
Nach der Dekomprimierung der grünen Version von m...
Inhaltsverzeichnis Vorwort Hintergrund Umsetzungs...
Ohne weitere Umschweife werde ich den Code direkt...
Im Tabellenkopf können Sie die Farbe der hellen U...