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.
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!