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
Die Funktionen der drei Attribute Flex-Grow, Flex...
Inhaltsverzeichnis 1. Einführung in die Computert...
Migration ist in vielen Fällen unvermeidlich. Har...
1. Die drei Dateien /etc/hosts, /etc/resolv.conf ...
Inhaltsverzeichnis Blasensortierung Auswahl Sorti...
1. Fügen Sie package.json hinzu "Haupt"...
Wirkung: Ideen: Verwenden Sie das Eingabetypattri...
Die verständlichste Erklärung des Genauigkeitspro...
Öffnen Sie DREAMWEAVER und erstellen Sie ein neue...
Inhaltsverzeichnis Beispiele aus dem wirklichen L...
1. Stoppen Sie den MySQL-Dienst in der Befehlszei...
Wenn Sie CSS-Pseudoelemente zur Steuerung von Ele...
Vorwort In den meisten Projekten werden Sie auf e...
Inhaltsverzeichnis 1. Wie verwende ich Mixin? 2. ...
Inhaltsverzeichnis 1. Grammatik 2. Beispiele 3. A...