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

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を追加することで、より高度な分岐ロジックも構築可能です。

  1. MySQLストアドプロシージャ内で別のストアドプロシージャを呼び出す方法

    MySQLのストアドプロシージャは、その内部で別のストアドプロシージャを呼び出すことが可能です。これはCALLステートメントを使用することで実現でき、処理をモジュール化して再利用性を高める上で非常に便利な機能です。ここでは、あるストアドプロシージャが別のストアドプロシージャを呼び出し、last_insert_id()を取得する具体例を見ていきましょう。サンプルテーブルの作成まず、例として使用するテーブルを作成します。以下のテーブルは、自動採番されるIDと名前を持つ従業員テーブルです。mysql> CREATE TABLE employee.tbl(Id INT NOT NULL AUTO

  2. MySQLでSELECTステートメントを使ってストアドプロシージャを呼び出す方法

    MySQLでは、FROM句の中でストアドプロシージャを直接指定してSELECTすることはできません。代わりにCALLコマンドを使ってプロシージャを呼び出し、その後でSELECTステートメントを実行して結果を確認する流れになります。この記事では、実際にテーブルとストアドプロシージャを作成し、CALLで呼び出してからSELECTでデータを取得するまでの手順を順番に解説します。1. サンプルテーブルを作成するまずはデータを格納するためのテーブルを作成しましょう。以下の例では、顧客ID・顧客名・出荷日時を持つテーブルを定義しています。mysql> create table DemoTable2