MySQLのIFステートメントをストアドプロシージャで使う方法を徹底解説
MySQLのIFステートメントとは
MySQLのIFステートメントは、ストアドプロシージャ内で基本的な条件分岐を実現するための構文です。指定した条件式が真(TRUE)と評価された場合にのみ、THEN以降に記述した処理が実行されます。
なお、ここで紹介するIFステートメントはSQL文中で使われるIF()関数とは異なるものであり、ストアドプログラム内でのみ使用可能な点に注意してください。
基本構文
IF expression THEN Statements; END IF;
IFステートメントは必ずセミコロン(;)で終了する必要があります。また、条件が偽(FALSE)の場合にELSE分岐がないと何も実行されないため、必要に応じてELSE句やELSEIF句を組み合わせて利用します。
サンプルデータの準備
IFステートメントの実際の使い方を確認するために、以下のような「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ステートメントを含むストアドプロシージャの作成
次のクエリでは、引数として渡された科目名をもとに、IFステートメントで条件判定を行い、対応するコース名を出力パラメータに設定する「coursedetails_IF」というプロシージャを作成しています。
mysql> DELIMITER // ;
mysql> CREATE PROCEDURE coursedetails_IF(IN S_Subject Varchar(20), OUT S_Course varchar(20))
-> 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)';
-> END IF;
-> END //
Query OK, 0 rows affected (0.00 sec)
このプロシージャの処理の流れは以下の通りです。
- INパラメータ「S_Subject」: 判定対象となる科目名を受け取ります。
- DECLARE文: 一時的な変数「Sub」を宣言し、SELECT文の結果を格納します。
- IFステートメント: 変数「Sub」が「Computers」だった場合のみ、出力用変数「S_Course」に「B.Tech(CSE)」を代入します。
プロシージャの実行と結果の確認
作成したプロシージャをCALL文で呼び出すと、以下のように結果を確認できます。
mysql> Delimiter ; //
mysql> CALL coursedetails_IF('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)
科目「Computers」を渡したため、IFステートメントの条件が満たされ、出力パラメータ「@S_Course」に「B.Tech(CSE)」が格納されていることがわかります。
まとめ
MySQLのIFステートメントを使えば、ストアドプロシージャ内で条件に応じた柔軟な処理を実装できます。複数の条件を扱いたい場合は、ELSEIFや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