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文を利用したりすることも可能です。
-
MySQLストアドプロシージャで数学演算を実行する方法
MySQLのストアドプロシージャで計算処理を行うMySQLのストアドプロシージャを利用すると、金額×数量のような数学演算をまとめて定義し、必要なときに簡単に呼び出して実行できます。ここでは、引数として受け取った「amount(金額)」と「quantity(数量)」を掛け合わせて合計を求めるプロシージャを作成する手順を紹介します。ストアドプロシージャの作成まず、delimiter を変更してプロシージャ本体を定義します。以下の例では、amount と quantity の2つの INT 型引数を受け取り、その積を「Total」として表示します。mysql> delimiter // mys
-
MySQLストアドプロシージャでテーブルにデータを挿入する方法
MySQLのストアドプロシージャを使ってテーブルにデータを挿入するには、以下のような構文を使用します。create procedure yourProcedureName(OptionalParameter) begin insert into yourTableName() values(yourValue1,yourValue2,...N); endサンプルテーブルの作成まずは、この構文を実際に理解するために、テスト用のテーブルを作成してみましょう。mysql> create table DemoTable1928 ( Id int NOT NULL