MySQLストアドプロシージャで条件に応じたメッセージを表示する方法
ストアドプロシージャでメッセージを表示する基本
MySQLのストアドプロシージャ内で条件に基づいて異なるメッセージを表示したい場合は、IF-ELSE文を使用します。以下では、引数として渡された値が100より大きいかどうかを判定し、それぞれ異なる挨拶メッセージを出力するプロシージャを作成する手順を解説します。
ストアドプロシージャの作成
まず、DELIMITERを変更してプロシージャを定義します。値が100より大きければ「HELLO」を、そうでなければ「BYE」を名前と連結して表示する仕組みです。
mysql> DELIMITER //
mysql> CREATE PROCEDURE showMessage(value int,Name varchar(20))
BEGIN
IF(value > 100) then
SELECT CONCAT("HELLO"," ",Name);
ELSE
SELECT CONCAT("BYE"," ",Name);
END IF;
END
//
Query OK, 0 rows affected (0.18 sec)
mysql> DELIMITER ;
プロシージャの作成が完了したら、DELIMITERを元の「;」に戻すことを忘れないようにしましょう。
ケース1:値が100より大きい場合
CALLコマンドを使ってストアドプロシージャを呼び出します。ここでは、valueに200(100より大きい値)を指定してみます。
call showMessage(200,'John');
IF条件が真となるため、「HELLO」と名前が連結された次の出力が得られます。
+--------------------------+
| CONCAT("HELLO"," ",Name) |
+--------------------------+
| HELLO John |
+--------------------------+
1 row in set (0.00 sec)
Query OK, 0 rows affected, 1 warning (0.02 sec)
ケース2:値が100以下の場合
次に、valueに10(100未満の値)を指定して呼び出してみます。この場合、IF条件が偽となるためELSEブロックが実行され、別のメッセージが表示されます。
mysql> call showMessage(10,'John');
実行結果は以下の通りです。
+------------------------+
| CONCAT("BYE"," ",Name) |
+------------------------+
| BYE John |
+------------------------+
1 row in set (0.00 sec)
Query OK, 0 rows affected (0.01 sec)
まとめ
このように、ストアドプロシージャ内でIF-ELSE文を活用すれば、渡されたパラメータの値に応じて柔軟にメッセージを切り替えて表示できます。業務システムでのバリデーション結果の通知や、処理分岐のログ出力など、さまざまな場面で応用できる基本的なテクニックです。
-
MySQLで予約語「from」を列名として使用する方法
MySQLで「from」を列名として使うには? MySQLでは「from」は予約語(リザーブドワード)として登録されているため、そのまま列名として使用するとエラーが発生します。しかし、バッククォート(`` ` ``)で囲むことで、予約語である「from」を列名として扱うことができます。 この記事では、実際にテーブルを作成し、「from」を列名としてデータの挿入や取得を行う手順を解説します。 1. バッククォートを使ってテーブルを作成する まず、列名「from」をバッククォートで囲んでテーブルを作成します。以下のSQLを実行してください。 mysql> create table Demo
-
MySQLのストアドプロシージャでテーブルのレコードを表示する方法
MySQLでは、ストアドプロシージャ内にSELECT文を組み込むことで、テーブルのレコードを簡単に表示できます。ストアドプロシージャを活用すると、よく使うクエリを再利用可能な形で保存できるため、作業の効率化につながります。ここでは、実際の手順を順番に解説していきます。1. テーブルを作成するまず、サンプル用のテーブルを作成します。mysql> create table DemoTable1933 ( ClientName varchar(20) ); Query OK, 0 rows affected (0.00 sec)2. レコードを挿入する次に、INSERT