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

So erhalten/berechnen Sie den Offset eines Seitenelements mit JavaScript

Frage Durch Klicken auf ein Steuerelement wird ei...

Tipps zur Optimierung von CSS-Schattenanimationen

Diese Technik stammt aus diesem Artikel - So anim...

Detaillierte Erläuterung der MySQL-Datenbankisolationsebene und des MVCC

Inhaltsverzeichnis 1. Isolationsstufe LESEN SIE U...

Javascript zum Wechseln von Bildern per Mausklick

In diesem Artikelbeispiel wird der spezifische Ja...

Detailliertes Tutorial zur Installation von ElasticSearch 6.4.1 auf CentOS7

1. Laden Sie das ElasticSearch 6.4.1-Installation...

Beispiel für die Konfiguration mehrerer virtueller Hosts in nginx

Es ist sehr praktisch, den virtuellen Host vhost ...

Super detaillierte grundlegende JavaScript-Syntaxregeln

Inhaltsverzeichnis 01 JavaScript (abgekürzt: js) ...

XHTML-Einführungstutorial: Textformatierung und Sonderzeichen

<br />Dieser Abschnitt stellt die Implementi...

HTML+CSS zum Erstellen von Herzschlag-Spezialeffekten

Heute werden wir einen einfachen Herzschlageffekt...

So verwenden Sie Node zum Implementieren des statischen Datei-Cachings

Inhaltsverzeichnis Cache Klassifizierung des Cach...

Analyse der vier Transaktionsisolationsstufen in MySQL anhand von Beispielen

Vorwort Um bei Datenbankoperationen die Richtigke...

Beispiele für die Implementierung und Verwendung von geplanten MySQL-Aufgaben

Dieser Artikel veranschaulicht anhand von Beispie...