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
Der HTTP-Statuscode ist ein dreistelliger Code, d...
In diesem Artikel wird beschrieben, wie Sie die a...
DOM-Konzepte DOM: Dokumentobjektmodell: Das Dokum...
Schauen wir uns zunächst die Wirkung an: Dieser E...
Vorbereitung: 192.168.16.128 192.168.16.129 Zwei ...
Im Prozess der Teamentwicklung ist die Formulieru...
Wenn Sie Informationen von Ihren Benutzern sammel...
Inhaltsverzeichnis 1 Einleitung 2 Voraussetzungen...
1 CSS-Stil ohne Semikolon ";" 2 Tags sin...
1. Was ist In react Anwendungen werden Ereignisna...
In diesem Artikel wird der spezifische Code von j...
Ich glaube, dass jeder MySQL aus verschiedenen Gr...
In CSS3 können mit der Transformationsfunktion vi...
Upgrade-Hintergrund: Um die Sicherheitslücke in d...
Da die Nachfrage nach Front-End-Seiten weiter ste...