MySQL
 Computer >> コンピューター >  >> プログラミング >> MySQL

MySQLストアドプロシージャで条件分岐を設定する方法(IF...ELSE構文の使い方)

MySQLのストアドプロシージャ内で条件分岐を実装したい場合は、IF...ELSE構文を使用します。この構文を使うことで、条件に応じて異なる処理を実行できるようになります。

IF...ELSE構文の基本形

MySQLにおけるIF...ELSE文の基本的な書式は以下のとおりです。

IF yourCondition THEN
    yourStatement1;
ELSE
    yourStatement2;
END IF;
  • yourCondition:評価される条件式(例:変数が10より大きいかどうか)
  • yourStatement1:条件が真(TRUE)の場合に実行される処理
  • yourStatement2:条件が偽(FALSE)の場合に実行される処理

ストアドプロシージャでの実装例

それでは、実際に上記の構文を使ってストアドプロシージャを作成してみましょう。以下の例では、引数として受け取った値が10より大きいかどうかを判定し、結果に応じて異なるメッセージを表示します。

mysql> DELIMITER //
mysql> CREATE PROCEDURE IF_ELSE_DEMO(IN value int)
    -> BEGIN
    ->    SET @val = value;
    ->    IF @val > 10 THEN
    ->       SELECT CONCAT(@val, ' is greater than 10');
    ->    ELSE
    ->       SELECT CONCAT(@val, ' is less than 10 ');
    ->    END IF;
    -> END;
    -> //
Query OK, 0 rows affected (0.16 sec)

プロシージャの作成後は、デリミタを元のセミコロン(;)に戻しておきましょう。

mysql> DELIMITER ;

ポイント解説

  • DELIMITER //:ストアドプロシージャ内では複数のSQL文が含まれるため、文の区切り文字を一時的に「//」へ変更します。これにより、MySQLがプロシージャ本体を途中で解釈してしまうことを防ぎます。
  • IN value int:呼び出し時に整数値を受け取る入力パラメータを定義しています。
  • SET @val = value;:引数の値をユーザー変数@valに格納し、条件判定に使用しています。

ストアドプロシージャの呼び出し方法

作成したストアドプロシージャは、CALLコマンドを使って実行できます。ここでは、引数に18を渡して呼び出してみます。

mysql> CALL IF_ELSE_DEMO(18);

実行結果

引数18は10より大きいため、IFブロック内の処理が実行され、以下のような結果が出力されます。

+------------------------------------+
| CONCAT(@val, ' is greater than 10') |
+------------------------------------+
| 18 is greater than 10              |
+------------------------------------+
1 row in set (0.03 sec)
Query OK, 0 rows affected (0.04 sec)

このように、IF...ELSE構文を活用することで、ストアドプロシージャの中に柔軟な条件分岐ロジックを組み込むことができます。さらに複雑な分岐が必要な場合は、ELSEIF句を追加したり、CASE文を利用したりすることも可能です。

  1. MySQLストアドプロシージャで数学演算を実行する方法

    MySQLのストアドプロシージャで計算処理を行うMySQLのストアドプロシージャを利用すると、金額×数量のような数学演算をまとめて定義し、必要なときに簡単に呼び出して実行できます。ここでは、引数として受け取った「amount(金額)」と「quantity(数量)」を掛け合わせて合計を求めるプロシージャを作成する手順を紹介します。ストアドプロシージャの作成まず、delimiter を変更してプロシージャ本体を定義します。以下の例では、amount と quantity の2つの INT 型引数を受け取り、その積を「Total」として表示します。mysql> delimiter // mys

  2. MySQLストアドプロシージャでテーブルにデータを挿入する方法

    MySQLのストアドプロシージャを使ってテーブルにデータを挿入するには、以下のような構文を使用します。create procedure yourProcedureName(OptionalParameter) begin insert into yourTableName() values(yourValue1,yourValue2,...N); endサンプルテーブルの作成まずは、この構文を実際に理解するために、テスト用のテーブルを作成してみましょう。mysql> create table DemoTable1928 ( Id int NOT NULL