Heim  >  Artikel  >  Datenbank  >  Gibt die gespeicherte MySQL-Prozedur mehrere Ergebnismengen zurück?

Gibt die gespeicherte MySQL-Prozedur mehrere Ergebnismengen zurück?

(*-*)浩
(*-*)浩Original
2019-05-18 11:04:169980Durchsuche

In diesem Artikel werden die Ergebnisse vorgestellt, wenn die gespeicherte Prozedur mehrere Ergebnismengen zurückgibt. Ich hoffe, dass dies eine Referenz für alle sein kann.

Gibt die gespeicherte MySQL-Prozedur mehrere Ergebnismengen zurück?

Die gespeicherte MySQL-Funktion gibt 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.

Sehen wir uns zunächst die Struktur einer Bestelltabelle an:

mysql> desc orders;
+----------------+-------------+------+-----+---------+-------+
| Field          | Type        | Null | Key | Default | Extra |
+----------------+-------------+------+-----+---------+-------+
| orderNumber    | int(11)     | NO   | PRI | NULL    |       |
| orderDate      | date        | NO   |     | NULL    |       |
| requiredDate   | date        | NO   |     | NULL    |       |
| shippedDate    | date        | YES  |     | NULL    |       |
| status         | varchar(15) | NO   |     | NULL    |       |
| comments       | text        | YES  |     | NULL    |       |
| customerNumber | int(11)     | NO   | MUL | NULL    |       |
+----------------+-------------+------+-----+---------+-------+
7 rows in set

Dann schauen wir uns eine gespeicherte Prozedur an, die Kundennummern und Retouren (versandt und storniert) akzeptiert, die Gesamtzahl der gelösten und umstrittenen Aufträge (mehrere Ergebnismengen):

DELIMITER $$
 
CREATE PROCEDURE get_order_by_cust(
 IN cust_no INT,
 OUT shipped INT,
 OUT canceled INT,
 OUT resolved INT,
 OUT disputed INT)
BEGIN
 -- shipped
 SELECT
            count(*) INTO shipped
        FROM
            orders
        WHERE
            customerNumber = cust_no
                AND status = 'Shipped';
 
 -- canceled
 SELECT
            count(*) INTO canceled
        FROM
            orders
        WHERE
            customerNumber = cust_no
                AND status = 'Canceled';
 
 -- resolved
 SELECT
            count(*) INTO resolved
        FROM
            orders
        WHERE
            customerNumber = cust_no
                AND status = 'Resolved';
 
 -- disputed
 SELECT
            count(*) INTO disputed
        FROM
            orders
        WHERE
            customerNumber = cust_no
                AND status = 'Disputed';
 
END

Tatsächlich benötigt die gespeicherte Prozedur zusätzlich zu den IN-Parametern auch 4 zusätzliche OUT-Parameter: versendet, storniert, gelöst und umstritten. Verwenden Sie in der gespeicherten Prozedur die Select-Anweisung mit der Count-Funktion, um die entsprechende Bestellsumme basierend auf dem Bestellstatus zu ermitteln und diese dem entsprechenden Parameter zuzuweisen. Wenn wir gemäß der 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. Nachdem wir die gespeicherte Prozedur ausgeführt haben, verwenden wir die SELECT-Anweisung, um den Variablenwert auszugeben:

+----------+-----------+-----------+-----------+
| @shipped | @canceled | @resolved | @disputed |
+----------+-----------+-----------+-----------+
|       22 |         0 |         1 |         1 |
+----------+-----------+-----------+-----------+
1 row in set

Das obige ist der detaillierte Inhalt vonGibt die gespeicherte MySQL-Prozedur mehrere Ergebnismengen zurück?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn