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

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文を活用すれば、渡されたパラメータの値に応じて柔軟にメッセージを切り替えて表示できます。業務システムでのバリデーション結果の通知や、処理分岐のログ出力など、さまざまな場面で応用できる基本的なテクニックです。

  1. MySQLで予約語「from」を列名として使用する方法

    MySQLで「from」を列名として使うには? MySQLでは「from」は予約語(リザーブドワード)として登録されているため、そのまま列名として使用するとエラーが発生します。しかし、バッククォート(`` ` ``)で囲むことで、予約語である「from」を列名として扱うことができます。 この記事では、実際にテーブルを作成し、「from」を列名としてデータの挿入や取得を行う手順を解説します。 1. バッククォートを使ってテーブルを作成する まず、列名「from」をバッククォートで囲んでテーブルを作成します。以下のSQLを実行してください。 mysql> create table Demo

  2. MySQLのストアドプロシージャでテーブルのレコードを表示する方法

    MySQLでは、ストアドプロシージャ内にSELECT文を組み込むことで、テーブルのレコードを簡単に表示できます。ストアドプロシージャを活用すると、よく使うクエリを再利用可能な形で保存できるため、作業の効率化につながります。ここでは、実際の手順を順番に解説していきます。1. テーブルを作成するまず、サンプル用のテーブルを作成します。mysql> create table DemoTable1933 ( ClientName varchar(20) ); Query OK, 0 rows affected (0.00 sec)2. レコードを挿入する次に、INSERT