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

MySQLストアドプロシージャを使って5つの乱数を生成する方法

MySQLでは、ストアドプロシージャを活用することで、複数の乱数をまとめて簡単に生成できます。ここでは、RAND()関数とREPEATループを組み合わせて、5つの乱数を出力するストアドプロシージャ「RandomNumbers」の作成方法を紹介します。

ストアドプロシージャの作成

以下のクエリを実行すると、5つの乱数を生成するストアドプロシージャを作成できます。

mysql> DELIMITER //
mysql> DROP PROCEDURE IF EXISTS RandomNumbers;
    -> CREATE PROCEDURE RandomNumbers()
    -> BEGIN
    -> SET @i = 0;
    -> REPEAT
    -> SELECT RAND() AS 'Random Number';
    -> SET @i = @i + 1;
    -> UNTIL @i >=5 END REPEAT;
    -> END
    -> //
Query OK, 0 rows affected (0.16 sec)

Query OK, 0 rows affected (0.16 sec)

ストアドプロシージャの呼び出し

作成が完了したら、まずDELIMITERを通常のセミコロン(;)に戻してから、CALL文でプロシージャを呼び出します。すると、5つの異なる乱数が順番に出力されます。

mysql> DELIMITER ;
mysql> CALL RandomNumbers();
+---------------------+
| Random Number       |
+---------------------+
| 0.25968261739209536 |
+---------------------+
1 row in set (0.00 sec)

+--------------------+
| Random Number |
+--------------------+
| 0.1659662734400167 |
+--------------------+
1 row in set (0.01 sec)

+---------------------+
| Random Number       |
+---------------------+
| 0.05078354575744229 |
+---------------------+
1 row in set (0.01 sec)

+--------------------+
| Random Number      |
+--------------------+
| 0.7560189392008064 |
+--------------------+
1 row in set (0.04 sec)

+------------------+
| Random Number    |
+------------------+
| 0.62774408946535 |
+------------------+
1 row in set (0.04 sec)

Query OK, 0 rows affected (0.05 sec)

処理の流れのポイント

  • DELIMITER //:ストアドプロシージャ内のセミコロン(;)がMySQLクライアントによって誤って解釈されないよう、一時的に区切り文字を「//」へ変更します。
  • DROP PROCEDURE IF EXISTS:同名のプロシージャが既に存在する場合にエラーになるのを防ぐため、先に削除しておきます。
  • RAND()関数:0以上1未満の範囲でランダムな浮動小数点数を返します。毎回異なる値が出力されます。
  • REPEAT~UNTILループ:カウンタ変数@iを1ずつ増やしながら処理を繰り返し、@iが5以上になった時点でループを終了します。
  • DELIMITER ;:プロシージャの定義後は、区切り文字を元のセミコロンに戻しておきましょう。

この仕組みを応用すれば、生成する乱数の個数を引数として渡せるようにしたり、整数の乱数を生成したりと、さまざまな要件に合わせた柔軟なストアドプロシージャを作ることができます。

  1. MySQL Workbenchでストアドプロシージャを作成・実行する方法

    MySQL Workbenchでストアドプロシージャを作成する手順 まずは、ストアドプロシージャを作成してみましょう。以下は、MySQL Workbenchを使用してストアドプロシージャを作成するためのクエリ例です。 use business; DELIMITER // DROP PROCEDURE IF EXISTS SP_GETMESSAGE; CREATE PROCEDURE SP_GETMESSAGE() BEGIN DECLARE MESSAGE VARCHAR(100); SET MESSAGE="HELLO"; SELECT CONCAT(MESSAGE, ,

  2. MySQLストアドプロシージャでSHOW CREATE TABLEを実行する方法

    MySQLストアドプロシージャでSHOW CREATE TABLEを実行する方法 ストアドプロシージャの中でSHOW CREATE TABLEを実行したい場合は、動的SQL(プリペアドステートメント)を利用します。SHOW系のコマンドはプロシージャ内に直接記述できないため、SQL文を文字列として組み立てて実行するのがポイントです。 まずはサンプル用のテーブルを作成しましょう。 mysql> create table DemoTable2011 -> ( -> StudentId int NOT NULL AUTO_INCREMENT, -> St