MySQLストアドプロシージャでIF-ELSEを実装する方法
MySQLのストアドプロシージャ内で条件分岐を行いたい場合、IF-ELSE構文を使用します。この記事では、基本構文から実際のストアドプロシージャの作成・実行まで、サンプルコード付きでわかりやすく解説します。
IF-ELSEの基本構文
ストアドプロシージャ内でif-elseを実装するには、以下の構文を使用します。
if yourCondition then
yourStatement1;
else
yourStatement2;
end if;条件式(yourCondition)が真(TRUE)の場合は最初のステートメントが実行され、偽(FALSE)の場合はelse以降のステートメントが実行されます。なお、end ifの後には必ずセミコロン(;)を付ける必要がある点に注意してください。
サンプル:IF-ELSEを使ったストアドプロシージャの作成
それでは、実際にif-elseを組み込んだストアドプロシージャを作成してみましょう。次の例では、引数として渡された値が1000より大きいかどうかを判定し、結果に応じて異なるメッセージを表示します。
mysql> delimiter //
mysql> create procedure If_else_stored_demo(value int)
begin
if value > 1000 then
select "your value is greater than 1000";
else
select "your value is less than or equal to 1000";
end if ;
end
//
Query OK, 0 rows affected (0.00 sec)
mysql> delimiter ;ここで重要なのがdelimiterコマンドです。最初に区切り文字を「//」に変更しています。これは、ストアドプロシージャ内のセミコロン(;)が通常のSQLステートメントの終了と誤認識されるのを防ぐためです。プロシージャの作成が完了したら、最後にdelimiterを元の「;」に戻すことを忘れないようにしましょう。
ストアドプロシージャの呼び出し方
作成したストアドプロシージャは、CALLコマンドで呼び出すことができます。
mysql> call If_else_stored_demo(500);
このコマンドを実行すると、以下のような結果が出力されます。
+------------------------------------------+ | your value is less than or equal to 1000 | +------------------------------------------+ | your value is less than or equal to 1000 | +------------------------------------------+ 1 row in set (0.00 sec) Query OK, 0 rows affected (0.00 sec)
この例では引数に500を渡しているため、条件「value > 1000」が偽と判定され、else側のメッセージ「your value is less than or equal to 1000」が表示されます。逆に、1001以上の値を引数に渡せば、then側のメッセージ「your value is greater than 1000」が出力されます。
ポイントまとめ
- IF-ELSEは「if 条件 then ... else ... end if;」の形式で記述する
end ifの後にはセミコロンが必要- ストアドプロシージャ作成時は、あらかじめdelimiterを変更しておく
- プロシージャの実行にはCALL文を使用する
これらのポイントを押さえておけば、MySQLのストアドプロシージャで柔軟な条件分岐処理を簡単に実装できます。
-
MySQLストアドプロシージャでカラムの値を変数に格納する方法
MySQLのストアドプロシージャ内で変数を宣言するには、DECLARE文を使用します。さらにSELECT ~ INTO構文を組み合わせることで、テーブルのカラム値を変数に格納することができます。ここでは、実際にサンプルテーブルを作成し、ストアドプロシージャ経由でカラムの値を変数に取得する手順を解説します。1. サンプルテーブルの作成まず、以下のようにテーブルを作成します。mysql> create table DemoTable2034-> (-> StudentId int NOT NULL AUTO_INCREMENT PRIMARY KEY,-> StudentN
-
MySQLストアドプロシージャ内で動的SQLクエリを実装する方法
ストアドプロシージャ内で動的SQLクエリを実行するには、PREPARE STATEMENT(プリペアドステートメント)の仕組みを利用します。まずはサンプル用のテーブルを作成しましょう。1. テーブルの作成mysql> create table DemoTable2033 -> ( -> Id int NOT NULL AUTO_INCREMENT PRIMARY KEY, -> Name varchar(20) -> ); Query OK, 0 rows affected (1.61 sec)2. レコードの挿入INSERTコマン