Beispiel für eine gespeicherte MySQL-Prozedurmethode zum Zurückgeben mehrerer Werte

Beispiel für eine gespeicherte MySQL-Prozedurmethode zum Zurückgeben mehrerer Werte

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:
  • Anweisungen zur Verwendung der MySQL CASE WHEN-Anweisung
  • Zusammenfassung der if- und case-Anweisungen in MySQL
  • Mehrere Beispiele für die Verwendung der CASE WHEN-Anweisung von MySQL
  • So verwenden Sie die Case-When-Anweisung in MySQL, um eine Abfrage mit mehreren Bedingungen zu implementieren
  • Detailliertes Beispiel für die Verwendung der if-Anweisung in einer gespeicherten MySQL-Prozedur
  • Detaillierte Erklärung des Prinzips und der Verwendung des Cursors (DECLARE) in der gespeicherten MySQL-Prozedur
  • Definition und Zuweisung von Variablen in gespeicherten MySQL-Prozeduren
  • Einführung in die Verwendung der Cursorschleife für gespeicherte Prozeduren in MySQL
  • Detaillierte Erläuterung der gespeicherten Prozeduren und Funktionen von MySql
  • Detailliertes Beispiel für die Verwendung der Case-Anweisung in einer gespeicherten MySQL-Prozedur

<<:  js implementiert eine Formularvalidierungsfunktion

>>:  Lösung für das Problem des Sitzungsverlusts bei Nginx

Artikel empfehlen

Detaillierte Erklärung der 10 häufigsten HTTP-Statuscodes

Der HTTP-Statuscode ist ein dreistelliger Code, d...

Lernen Sie die Grundlagen der JavaScript-DOM-Operationen in einem Artikel

DOM-Konzepte DOM: Dokumentobjektmodell: Das Dokum...

CSS3 realisiert den Animationseffekt der Lotusblüte

Schauen wir uns zunächst die Wirkung an: Dieser E...

Acht Regeln für effektive Webformulare

Wenn Sie Informationen von Ihren Benutzern sammel...

Detaillierte Erklärung der React-Ereignisbindung

1. Was ist In react Anwendungen werden Ereignisna...

js implementiert ein einfaches Englisch-Chinesisch-Wörterbuch

In diesem Artikel wird der spezifische Code von j...

4 Funktionen, die durch das Transform-Attribut in CSS3 implementiert werden

In CSS3 können mit der Transformationsfunktion vi...

Detaillierte Schritte zum Upgrade von mysql8.0.11 auf mysql8.0.17 unter Win2008

Upgrade-Hintergrund: Um die Sicherheitslücke in d...