Dieser Artikel beschreibt anhand eines Beispiels, wie in einer gespeicherten MySQL-Prozedur mehrere Werte zurückgegeben werden. Teilen Sie uns die Einzelheiten zu Ihrer Information mit: Gespeicherte MySQL-Funktionen geben nur einen Wert zurück. Um eine gespeicherte Prozedur zu entwickeln, die mehrere Werte zurückgibt, müssen Sie eine gespeicherte Prozedur mit INOUT- oder OUT-Parametern verwenden. Schauen wir uns zunächst die Struktur einer Auftragstabelle an: mysql> desc-Bestellungen; +----------------+-------------+------+-----+---------+---------+----------+ | Feld | Typ | Null | Schlüssel | Standard | Extra | +----------------+-------------+------+-----+---------+---------+----------+ | Bestellnummer | int(11) | NEIN | PRI | NULL | | | Bestelldatum | Datum | NEIN | | NULL | | | erforderlichesDatum | Datum | NEIN | | NULL | | | Versanddatum | Datum | JA | | NULL | | | Status | varchar(15) | NEIN | | NULL | | | Kommentare | Text | JA | | NULL | | | Kundennummer | int(11) | NO | MUL | NULL | | +----------------+-------------+------+-----+---------+---------+----------+ 7 Reihen im Set Als Nächstes sehen wir uns eine gespeicherte Prozedur an, die eine Kundennummer akzeptiert und die Gesamtzahl der versandten, stornierten, gelösten und angefochtenen Bestellungen zurückgibt: TRENNUNGSZEICHEN $$ PROZEDUR ERSTELLEN get_order_by_cust( IN Kundennummer INT, OUT versendet INT, OUT abgebrochen INT, OUT aufgelöst INT, OUT umstritten INT) BEGINNEN -- versendet WÄHLEN Anzahl(*) INTO versendet AUS Bestellungen WO Kundennummer = Kundennr. UND Status = „Versendet“; -- abgesagt WÄHLEN count(*) INTO abgebrochen AUS Bestellungen WO Kundennummer = Kundennr. UND Status = ‚Abgebrochen‘; -- gelöst WÄHLEN count(*) INTO aufgelöst AUS Bestellungen WO Kundennummer = Kundennr. UND Status = ‚Gelöst‘; -- umstritten WÄHLEN count(*) INTO umstritten AUS Bestellungen WO Kundennummer = Kundennr. UND-Status = ‚Umstritten‘; ENDE Tatsächlich erfordert die gespeicherte Prozedur zusätzlich zu den IN-Parametern auch vier weitere OUT-Parameter: versendet, storniert, gelöst und umstritten. Verwenden Sie in der gespeicherten Prozedur eine Select-Anweisung mit der Count-Funktion, um die entsprechende Gesamtzahl der Bestellungen basierend auf dem Bestellstatus abzurufen und sie dem entsprechenden Parameter zuzuweisen. Wenn wir gemäß dem obigen SQL die gespeicherte Prozedur get_order_by_cust verwenden möchten, können wir die Kundennummer und vier benutzerdefinierte Variablen übergeben, um den Ausgabewert zu erhalten. Nach der Ausführung der gespeicherten Prozedur verwenden wir die SELECT-Anweisung, um den Variablenwert auszugeben: +----------+--------------+-----------+--------------+ | @versendet | @storniert | @gelöst | @umstritten | +----------+--------------+-----------+--------------+ | 22 | 0 | 1 | 1 | +----------+--------------+-----------+--------------+ 1 Reihe im Set In Kombination mit praktischen Anwendungen werfen wir einen Blick auf den Aufruf einer gespeicherten Prozedur, die mehrere Werte aus einem PHP-Programm zurückgibt: <?php /** * Gespeicherte Prozedur aufrufen, die mehrere Werte zurückgibt * @param $Kundennummer */ Funktion call_sp($Kundennummer) { versuchen { $pdo = neues PDO("mysql:host=localhost;dbname=yiibaidb", "root", "123456"); // führe die gespeicherte Prozedur aus $sql = 'CALL get_order_by_cust(:nein,@versendet,@storniert,@gelöst,@umstritten)'; : $stmt = $pdo->prepare($sql); $stmt->bindParam(':no', $customerNumber, PDO::PARAM_INT); $stmt->execute(); $stmt->closeCursor(); // führe die zweite Abfrage aus, um Werte vom OUT-Parameter abzurufen $r = $pdo->query("AUSWÄHLEN @versendet,@storniert,@gelöst,@umstritten") ->abrufen(PDO::FETCH_ASSOC); wenn ($r) { printf('Versendet: %d, Abgebrochen: %d, Gelöst: %d, Umstritten: %d', $r['@versendet'], $r['@abgebrochen'], $r['@gelöst'], $r['@umstritten']); } } Fang (PDOException $pe) { die("Ein Fehler ist aufgetreten:" . $pe->getMessage()); } } ruf_sp(141); Im obigen Code werden die benutzerdefinierten Variablen vor dem @-Symbol mit der Datenbankverbindung verknüpft, sodass sie zwischen den Aufrufen für den Zugriff verfügbar sind. 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:
|
<<: js implementiert eine Formularvalidierungsfunktion
>>: Lösung für das Problem des Sitzungsverlusts bei Nginx
Frage Durch Klicken auf ein Steuerelement wird ei...
Diese Technik stammt aus diesem Artikel - So anim...
Inhaltsverzeichnis 1. Isolationsstufe LESEN SIE U...
In diesem Artikelbeispiel wird der spezifische Ja...
1. Laden Sie das ElasticSearch 6.4.1-Installation...
Es ist sehr praktisch, den virtuellen Host vhost ...
Inhaltsverzeichnis 01 JavaScript (abgekürzt: js) ...
<br />Dieser Abschnitt stellt die Implementi...
Was wir jetzt simulieren, ist ein Master-Slave-Sy...
Heute werden wir einen einfachen Herzschlageffekt...
Inhaltsverzeichnis Vorwort 1. SS-Befehl 2. Gesamt...
Inhaltsverzeichnis Cache Klassifizierung des Cach...
Vorwort Um bei Datenbankoperationen die Richtigke...
Vorwort Wir alle wissen, dass man QR-Codes in off...
Dieser Artikel veranschaulicht anhand von Beispie...