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 ;:プロシージャの定義後は、区切り文字を元のセミコロンに戻しておきましょう。
この仕組みを応用すれば、生成する乱数の個数を引数として渡せるようにしたり、整数の乱数を生成したりと、さまざまな要件に合わせた柔軟なストアドプロシージャを作ることができます。
-
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, ,
-
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