MySQL-gespeicherte Prozeduren sind eine Reihe vordefinierter SQL-Anweisungen, die bei Bedarf aufgerufen und ausgeführt werden können. Gespeicherte Prozeduren können Code wiederverwendbar machen, die Datenbankleistung verbessern und gleichzeitig die Entwicklungssicherheit verbessern.
In MySQL können gespeicherte Prozeduren Ergebnismengen zurückgeben. In vielen Fällen kann die Verwendung gespeicherter Prozeduren zur Rückgabe von Ergebnismengen den Code prägnanter und klarer machen und auch die Abfrageleistung verbessern. In diesem Artikel wird erläutert, wie Sie eine Ergebnismenge in einer gespeicherten MySQL-Prozedur zurückgeben.
Erstellen Sie eine gespeicherte Prozedur mit einer Ergebnismenge
Bevor wir eine gespeicherte Prozedur zur Rückgabe einer Ergebnismenge verwenden, müssen wir verstehen, wie eine gespeicherte Prozedur mit einer Ergebnismenge erstellt wird. Hier ist ein Beispiel für die Erstellung einer einfachen gespeicherten Prozedur mit einer Ergebnismenge:
CREATE PROCEDURE get_all_users() BEGIN SELECT * FROM users; END
Im obigen Beispiel haben wir eine gespeicherte Prozedur namens get_all_users()
erstellt. Wenn die gespeicherte Prozedur get_all_users()
aufgerufen wird, gibt sie alle Zeilen in der Datentabelle users
zurück. get_all_users()
的存储过程。当调用 get_all_users()
存储过程时,它将会返回 users
数据表中的所有数据行。
注意,在存储过程中返回结果集之前,我们需要先定义结果集,MySQL 中定义结果集有两种方法:
SELECT
语句返回结果集下面将分别介绍这两种方法。
方法一:定义输出参数并返回结果集
在存储过程中定义输出参数,可以使用 OUT
和 INOUT
修饰符。使用 OUT
修饰符定义的参数表示该参数比存储过程执行时的输入参数更多了一个作用,它额外将被用于存储存储过程的结果集。
在下面的示例中,我们使用 OUT
修饰符定义一个名称为 results
的参数:
CREATE PROCEDURE get_all_users_2(OUT results VARCHAR(255)) BEGIN SELECT * FROM users; INTO results; END
在上面的示例中,我们使用 SELECT INTO
语句将查询结果保存到 results
参数中。
调用如下:
CALL get_all_users_2(@results); SELECT @results;
在上面的示例中,我们首先调用存储过程 get_all_users_2()
,并将结果存储在 @results
变量中。 然后,我们在 SELECT
语句中访问了 @results
变量,从而获取了存储过程返回的结果集。
方法二:使用 SELECT
语句返回结果集
另一种使用存储过程返回结果集的方法是,使用 SELECT
语句来返回结果集。这种方法特别适用于当我们需要返回多个结果集时。
下面的示例中,我们定义了一个带有两个 SELECT
语句的存储过程:
CREATE PROCEDURE get_all_users_3() BEGIN SELECT * FROM users WHERE age > 18; SELECT * FROM users WHERE age <= 18; END
在上面的示例中,我们使用两个 SELECT
语句,来分别返回 users
表中所有年龄大于 18 岁和小于等于 18 岁的数据行。
在调用这个存储过程后,我们可以通过多次调用 mysql_store_result()
和 mysql_fetch_row()
函数来获取每个结果集的行数据。
mysql_query("CALL get_all_users_3()"); MYSQL_RES *res = mysql_store_result(&mysql); MYSQL_ROW row; while ((row = mysql_fetch_row(res))) { printf("%s %d\n", row[1], stoi(row[2])); } mysql_next_result(&mysql); res = mysql_store_result(&mysql); while ((row = mysql_fetch_row(res))) { printf("%s %d\n", row[1], stoi(row[2])); }
上面的代码展示了如何通过在 mysql_query()
函数中调用存储过程来获取结果集,以及如何使用 mysql_store_result()
函数和 mysql_fetch_row()
函数来获取和处理我们的结果集数据。
结论
在MySQL中,存储过程可以返回结果集。我们可以通过定义输出参数来存储存储过程的结果集,也可以直接使用 SELECT
SELECT
-Anweisung, um die Ergebnismenge zurückzugebenOUT
und INOUT
verwenden. Mit dem Modifikator OUT
definierte Parameter geben an, dass der Parameter bei der Ausführung der gespeicherten Prozedur eine weitere Rolle spielt als die Eingabeparameter. Er wird zusätzlich zum Speichern des Ergebnissatzes der gespeicherten Prozedur verwendet. 🎜🎜Im Beispiel unten verwenden wir den Modifikator OUT
, um einen Parameter namens results
zu definieren: 🎜rrreee🎜Im Beispiel oben verwenden wir SELECT The INTO-Anweisung speichert die Abfrageergebnisse im Parameter <code>results
. 🎜🎜Der Aufruf lautet wie folgt: 🎜rrreee🎜Im obigen Beispiel rufen wir zunächst die gespeicherte Prozedur get_all_users_2()
auf und speichern die Ergebnisse in der Variablen @results
. Anschließend greifen wir auf die Variable @results
in der Anweisung SELECT
zu, um die von der gespeicherten Prozedur zurückgegebene Ergebnismenge zu erhalten. 🎜🎜Methode 2: Verwenden Sie die SELECT
-Anweisung, um eine Ergebnismenge zurückzugeben🎜🎜Eine andere Möglichkeit, eine gespeicherte Prozedur zur Rückgabe einer Ergebnismenge zu verwenden, besteht darin, die SELECT
-Anweisung zur Rückgabe zu verwenden eine Ergebnismenge. Dieser Ansatz ist besonders nützlich, wenn wir mehrere Ergebnismengen zurückgeben müssen. 🎜🎜Im folgenden Beispiel definieren wir eine gespeicherte Prozedur mit zwei SELECT
-Anweisungen: 🎜rrreee🎜Im obigen Beispiel verwenden wir zwei SELECT
-Anweisungen, um alle Datenzeilen zurückzugeben in der Tabelle Benutzer
, deren Alter größer als 18 Jahre und kleiner oder gleich 18 Jahre ist. 🎜🎜Nach dem Aufruf dieser gespeicherten Prozedur können wir die Zeilendaten jeder Ergebnismenge abrufen, indem wir die Funktionen mysql_store_result()
und mysql_fetch_row()
mehrmals aufrufen. 🎜rrreee🎜Der obige Code zeigt, wie man die Ergebnismenge durch Aufrufen der gespeicherten Prozedur in der Funktion mysql_query()
erhält und wie man die Funktion mysql_store_result()
mit mysql_fetch_row () Funktion zum Abrufen und Verarbeiten unserer Ergebnisdaten. 🎜🎜Fazit🎜🎜In MySQL können gespeicherte Prozeduren Ergebnismengen zurückgeben. Wir können die Ergebnismenge der gespeicherten Prozedur speichern, indem wir Ausgabeparameter definieren, oder wir können die Anweisung SELECT
direkt verwenden, um die Ergebnismenge in der gespeicherten Prozedur zurückzugeben. In jedem Fall werden die Abfrageleistung und die Codeklarheit besser verbessert. 🎜Das obige ist der detaillierte Inhalt vonSo geben Sie eine Ergebnismenge in einer gespeicherten MySQL-Prozedur zurück. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!