ホームページ  >  記事  >  データベース  >  MySQL ストアド プロシージャの戻り値の問題の詳細な紹介

MySQL ストアド プロシージャの戻り値の問題の詳細な紹介

PHPz
PHPzオリジナル
2023-04-19 14:11:211392ブラウズ

MySQL をデータ開発に使用する場合、ストアド プロシージャは非常に一般的に使用されるツールです。ストアド プロシージャを使用すると、コードの冗長性が削減され、操作手順が簡素化され、コードの操作効率が向上するため、データ開発の効率が向上します。ストアド プロシージャを使用する場合、多くの場合、ストアド プロシージャの戻り値を考慮する必要があります。この記事では、MySQL ストアド プロシージャの戻り値の問題について詳しく紹介します。

1. MySQL ストアド プロシージャの基本構造

MySQL では、ストアド プロシージャは次の部分で構成されます:

  1. ストアド プロシージャ名: つまり、ストアド プロシージャ MySQL 内のプロシージャの一意の識別子。
  2. ストアド プロシージャ パラメータ リスト: 特定の操作を完了するために外部から受信するパラメータを受け取るために使用されます。
  3. ストアド プロシージャ本体: ストアド プロシージャの具体的な実行ロジックを示します。これには、SQL ステートメント、条件判断、ループ構造などが含まれます。
  4. ストアド プロシージャの戻り値: ストアド プロシージャの実行完了後に呼び出し元に返される値を示します。
#2. MySQL ストアド プロシージャの戻り値の型

MySQL では、ストアド プロシージャの戻り値の型は次の 3 種類に分類できます。 ## 戻り値の固定数 (OUT)

    このタイプの戻り値は、ストアド プロシージャによって返される唯一の値として理解できます。ストアド プロシージャを定義するときに、戻り値を受け取るためにパラメータ リストに OUT タイプのパラメータを追加できます。例:
  1. DELIMITER $$ CREATE PROCEDURE GetTotal(IN a INT, IN b INT, OUT total INT) BEGIN SET total = a b; END$$ DELIMITER ;

ストアド プロシージャ GetTotal、受信します2 つの整数パラメータ a と b を使用して、2 つのパラメータの合計を計算し、結果を呼び出し元に返します。

注: ストアド プロシージャを定義する場合、SQL ステートメント内のセミコロンが区切り文字として誤解されるのを避けるために、DELIMITER を他の文字 (セミコロン以外の文字) として定義する必要があります。

複数の戻り値 (INOUT)

    このタイプの戻り値は、複数の値 (入力パラメーターと出力の両方を含む) を返すストアド プロシージャとして理解できます。パラメーター)。ストアド プロシージャを定義するときに、パラメータ リストに INOUT タイプのパラメータを追加できます。例:
  1. DELIMITER $$ CREATE PROCEDURE CompareAge(INOUT age1 INT, INOUT age2 INT) BEGIN IF age1 < age2 THEN SET age1 = age2; SET age2 = age1; END IF; END$$ DELIMITER ;

ストアド プロシージャ CompareAge は、2 つの整数パラメーター age1 と age2 を受け取り、2 つのパラメーターのサイズを比較し、age1 が age2 より小さい場合、2 つのパラメーターの値を交換します。

ストアド プロシージャを実行するときは、最初にパラメータの初期値を設定し、次にパラメータをストアド プロシージャに渡す必要があります。ストアド プロシージャの実行後、結果を元のパラメータに更新できます。

結果セットを返す (CURSOR)

    このタイプの戻り値は、結果セットを返すものとして理解できます。ストアド プロシージャを定義するときは、カーソルを定義し、そのカーソルを使用して結果セットを返す必要があります。例:
  1. DELIMITER $$ CREATE PROCEDURE GetList() BEGIN DECLARE cur CURSOR FOR SELECT * FROM TABLE_NAME; OPEN cur; SELECT * FROM TABLE_NAME; CLOSE cur; END$$ DELIMITER ;

Storedプロシージャ GetList は、TABLE_NAME テーブルのレコードをクエリし、結果セットを呼び出し元に返します。

注: 結果セットを使用する場合は、CALL GetList() などの CALL ステートメントを使用してストアド プロシージャを呼び出す必要があります。

3. MySQL ストアド プロシージャの実行

ストアド プロシージャの実行は、ストアド プロシージャのコンパイル フェーズとストアド プロシージャの実行フェーズの 2 つのフェーズに分かれています。

ストアド プロシージャのコンパイル フェーズ

    ストアド プロシージャのコンパイル フェーズとは、MySQL が初めてストアド プロシージャを取得するときにストアド プロシージャをコンパイルするという事実を指します。コンパイル プロセス中に、MySQL はストアド プロシージャの構文分析と意味分析を実行し、実行計画を生成します。
ストアド プロシージャの実行フェーズ

    ストアド プロシージャの実行フェーズとは、ストアド プロシージャが呼び出されたときに参照され、MySQL は生成された実行プランを実行して戻ります。実行結果を呼び出し元に送信します。実行プロセス中、MySQL はまずストアド プロシージャ本体のステートメントを実行し、次にストアド プロシージャの戻り値の型に従って対応する結果を返します。
  1. 4. MySQL ストアド プロシージャの戻り値の使用

ストアド プロシージャの戻り値を使用する場合は、CALL ステートメントを使用してストアド プロシージャを呼び出し、パラメータをストアド プロシージャに渡す必要があります。手順。例:

CALL GetTotal(1, 2, @result); SELECT @result;

ストアド プロシージャを実行した後、@variable を通じてストアド プロシージャの戻り値を取得できます。名前。ここでの @result は、ストアド プロシージャ GetTotal の戻り値です。

注: ストアド プロシージャを使用して結果セットを返す場合は、CALL ステートメントを使用してストアド プロシージャを呼び出し、カーソルを使用して結果セットを処理する必要があります。

5. 概要

この記事では、ストアド プロシージャの基本構造、戻り値の型、実行プロセス、戻り値の用途など、MySQL ストアド プロシージャの戻り値の問題について詳しく紹介します。ストアド プロシージャを使用する場合は、実際のニーズに応じて適切な戻り値の型を選択し、CALL ステートメントを使用してストアド プロシージャを呼び出すと、データ開発の効率が高くなります。

以上がMySQL ストアド プロシージャの戻り値の問題の詳細な紹介の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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