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
Vorwort Wenn es um Datenbanktransaktionen geht, f...
1. CPU-Auslastung sar -p (den ganzen Tag anzeigen...
Das Notizblockprogramm wird mithilfe der drei wic...
Einführung Während des Arbeitsprozesses kommt es ...
Warum prettier verwenden? In großen Unternehmen k...
Inhaltsverzeichnis einführen Objektattribute in R...
Vorwort Heute bin ich in Nginx auf ein sehr selts...
Rand paralleler Boxen (Überlappung doppelter Ränd...
In diesem Artikel wird hauptsächlich die Verwendun...
<br />Es gibt keine Straße auf der Welt. Wen...
Das Installationstutorial für MySQL 5.7.27 wird w...
Dieser Artikel dient lediglich der Erinnerung an ...
Vor einiger Zeit habe ich einen Blogbeitrag mit d...
Installation der MySQL-Dekomprimierungsversion un...
Installieren Sie zuerst die abhängigen Pakete, um...