MySQLのIF ELSEステートメントをストアドプロシージャで使う方法をわかりやすく解説
MySQLのIF ELSEステートメントは、条件式が偽(false)と評価された場合に別の処理を実行できる、基本的な条件分岐の構造を提供します。構文は以下のとおりです。
IF expression THEN
statements;
ELSE
else-statements;
END IF;各ステートメントは必ずセミコロン(;)で終わる必要があります。条件式が真(true)の場合はTHEN以降の処理が実行され、偽(false)の場合はELSE以降の処理が実行されます。
ストアドプロシージャでのIF ELSEの使用例
MySQLストアドプロシージャ内でのIF ELSEステートメントの使い方を示すために、以下のデータを持つ「student_info」テーブルを例にストアドプロシージャを作成してみましょう。
mysql> Select * from student_info; +------+---------+------------+------------+ | id | Name | Address | Subject | +------+---------+------------+------------+ | 101 | YashPal | Amritsar | History | | 105 | Gaurav | Jaipur | Literature | | 125 | Raman | Shimla | Computers | +------+---------+------------+------------+ 3 rows in set (0.00 sec)
プロシージャの作成
次のクエリは、IF ELSEステートメントを含む「coursedetails_IFELSE」という名前のストアドプロシージャを作成します。このプロシージャは、入力パラメータ(IN)として科目名を受け取り、その科目が「Computers」であれば「B.Tech(CSE)」を、それ以外であれば「Subject Not in the table」を出力パラメータ(OUT)に設定します。
mysql> DELIMITER // ;
mysql> CREATE PROCEDURE coursedetails_IFELSE(IN S_Subject Varchar(20), OUT S_Course varchar(50))
-> BEGIN
-> DECLARE Sub Varchar(20);
-> SELECT Subject INTO SUB
-> FROM Student_info WHERE S_Subject = Subject;
-> IF Sub = 'Computers' THEN
-> SET S_Course = 'B.Tech(CSE)';
-> ELSE
-> SET S_Course = 'Subject Not in the table ';
-> END IF;
-> END //
Query OK, 0 rows affected (0.00 sec)プロシージャの実行と結果の確認
作成したプロシージャを呼び出すと、以下のような結果が得られます。
まず、テーブルに存在する「Computers」を引数に指定した場合です。
mysql> Delimiter ; //
mysql> CALL coursedetails_IFELSE('Computers', @S_Course);
Query OK, 1 row affected (0.00 sec)
mysql> Select @S_Course;
+-------------+
| @S_Course |
+-------------+
| B.Tech(CSE) |
+-------------+
1 row in set (0.00 sec)条件式が真と評価されたため、THENブロックの処理が実行され、「B.Tech(CSE)」が出力されました。
次に、テーブルに存在しない「History」を引数に指定した場合です。
mysql> CALL coursedetails_IFELSE ('History', @S_Course);
Query OK, 0 rows affected (0.00 sec)
mysql> Select @S_Course;
+--------------------------------+
| @S_Course |
+--------------------------------+
| Subject Not in the table |
+--------------------------------+
1 row in set (0.00 sec)この場合、条件式が偽と評価されたため、ELSEブロックの処理が実行され、「Subject Not in the table」というメッセージが出力されました。
まとめ
このように、MySQLのIF ELSEステートメントを使うことで、ストアドプロシージャ内で条件に応じた柔軟な処理を実装できます。入力された値に基づいて異なる結果を返すロジックを簡単に構築できるため、業務アプリケーションでのデータ処理やバリデーションなど、さまざまな場面で活用できます。
-
MySQLストアドプロシージャ内で別のストアドプロシージャを呼び出す方法
MySQLのストアドプロシージャは、その内部で別のストアドプロシージャを呼び出すことが可能です。これはCALLステートメントを使用することで実現でき、処理をモジュール化して再利用性を高める上で非常に便利な機能です。ここでは、あるストアドプロシージャが別のストアドプロシージャを呼び出し、last_insert_id()を取得する具体例を見ていきましょう。サンプルテーブルの作成まず、例として使用するテーブルを作成します。以下のテーブルは、自動採番されるIDと名前を持つ従業員テーブルです。mysql> CREATE TABLE employee.tbl(Id INT NOT NULL AUTO
-
MySQLでSELECTステートメントを使ってストアドプロシージャを呼び出す方法
MySQLでは、FROM句の中でストアドプロシージャを直接指定してSELECTすることはできません。代わりにCALLコマンドを使ってプロシージャを呼び出し、その後でSELECTステートメントを実行して結果を確認する流れになります。この記事では、実際にテーブルとストアドプロシージャを作成し、CALLで呼び出してからSELECTでデータを取得するまでの手順を順番に解説します。1. サンプルテーブルを作成するまずはデータを格納するためのテーブルを作成しましょう。以下の例では、顧客ID・顧客名・出荷日時を持つテーブルを定義しています。mysql> create table DemoTable2