ホームページ  >  記事  >  データベース  >  MySQLストアドプロシージャで結果セットを返す方法

MySQLストアドプロシージャで結果セットを返す方法

PHPz
PHPzオリジナル
2023-04-21 11:20:003199ブラウズ

MySQL ストアド プロシージャは、必要に応じて呼び出して実行できる事前定義された SQL ステートメントのセットです。ストアド プロシージャを使用すると、コードを再利用できるようになり、データベースのパフォーマンスが向上すると同時に、開発のセキュリティも向上します。

MySQL では、ストアド プロシージャは結果セットを返すことができます。多くの場合、ストアド プロシージャを使用して結果セットを返すと、コードがより簡潔かつ明確になり、クエリのパフォーマンスも向上します。この記事では、MySQL ストアド プロシージャで結果セットを返す方法を紹介します。

結果セットを含むストアド プロシージャを作成する

ストアド プロシージャを使用して結果セットを返す前に、結果セットを含むストアド プロシージャの作成方法を理解する必要があります。結果セットを含む単純なストアド プロシージャを作成する例を次に示します。

CREATE PROCEDURE get_all_users()
BEGIN
    SELECT * FROM users;
END

上の例では、get_all_users() という名前のストアド プロシージャを作成しました。 get_all_users() ストアド プロシージャが呼び出されると、users データ テーブル内のすべてのデータ行が返されます。

ストアド プロシージャで結果セットを返す前に、最初に結果セットを定義する必要があることに注意してください。MySQL で結果セットを定義するには 2 つの方法があります。パラメータを出力し、結果セットを返す

  1. SELECT
  2. ステートメントを使用して結果セットを返す
  3. 2 つの方法を以下に紹介します。
方法 1: 出力パラメーターを定義し、結果セットを返す

ストアド プロシージャで出力パラメーターを定義するには、

OUT

および

INOUT## を使用できます。 # 個の修飾子。 OUT 修飾子を使用して定義されたパラメーターは、ストアド プロシージャの実行時に、パラメーターに入力パラメーターよりも 1 つ多くの関数があることを示します。さらに、ストアド プロシージャの結果セットを格納するために使用されます。 次の例では、OUT 修飾子を使用して、

results

という名前のパラメータを定義します。 <pre class="brush:php;toolbar:false">CREATE PROCEDURE get_all_users_2(OUT results VARCHAR(255)) BEGIN     SELECT * FROM users;     INTO results;  END</pre>上の例では、 SELECT INTO ステートメントを使用して、クエリ結果を

results

パラメータに保存します。 呼び出しは次のとおりです: <pre class="brush:php;toolbar:false">CALL get_all_users_2(@results); SELECT @results;</pre>上の例では、まずストアド プロシージャ

get_all_users_2()

を呼び出し、結果を

@results# に保存します。変数内の ##。次に、

SELECT ステートメントの @results 変数にアクセスして、ストアド プロシージャから返される結果セットを取得します。 方法 2: SELECT ステートメントを使用して結果セットを返す

ストアド プロシージャを使用して結果セットを返す別の方法は、

SELECT ステートメントを使用することです。結果セットを返す ステートメント。このアプローチは、複数の結果セットを返す必要がある場合に特に便利です。

次の例では、2 つの

SELECT ステートメントを使用してストアド プロシージャを定義します。

CREATE PROCEDURE get_all_users_3()
BEGIN
    SELECT * FROM users WHERE age > 18;
    SELECT * FROM users WHERE age <= 18;
END
上の例では、2 つの

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

ステートメントを直接使用してストアド プロシージャの結果セットを返すこともできます。いずれの場合も、クエリのパフォーマンスとコードの明瞭さが向上します。

以上がMySQLストアドプロシージャで結果セットを返す方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。