Heim  >  Artikel  >  Datenbank  >  So geben Sie eine Ergebnismenge in einer gespeicherten MySQL-Prozedur zurück

So geben Sie eine Ergebnismenge in einer gespeicherten MySQL-Prozedur zurück

PHPz
PHPzOriginal
2023-04-21 11:20:003198Durchsuche

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 中定义结果集有两种方法:

  1. 定义输出参数并返回结果集
  2. 使用 SELECT 语句返回结果集

下面将分别介绍这两种方法。

方法一:定义输出参数并返回结果集

在存储过程中定义输出参数,可以使用 OUTINOUT 修饰符。使用 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

Beachten Sie, dass wir vor der Rückgabe der Ergebnismenge in der gespeicherten Prozedur zunächst die Ergebnismenge definieren müssen. Es gibt zwei Möglichkeiten, die Ergebnismenge in MySQL zu definieren: 🎜
  1. Ausgabeparameter definieren und die Ergebnismenge zurückgeben
  2. Verwenden Sie die SELECT-Anweisung, um die Ergebnismenge zurückzugeben
🎜Diese beiden Methoden werden im Folgenden vorgestellt. 🎜🎜Methode 1: Ausgabeparameter definieren und Ergebnismenge zurückgeben🎜🎜Um Ausgabeparameter in der gespeicherten Prozedur zu definieren, können Sie die Modifikatoren OUT 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!

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