Computer >> 컴퓨터 >  >> 프로그래밍 >> MySQL

MySQL 저장 프로시저로 난수 5개 생성하는 방법

MySQL에서는 저장 프로시저(Stored Procedure)와 반복문을 활용하면 난수 여러 개를 손쉽게 생성할 수 있습니다. 아래 쿼리는 RAND() 함수를 이용해 난수 5개를 출력하는 저장 프로시저를 만드는 예제입니다.

저장 프로시저 생성하기

먼저 구분자(Delimiter)를 변경한 뒤, 기존에 같은 이름의 프로시저가 있다면 삭제하고 새 프로시저를 생성합니다.

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 //: 저장 프로시저 내부의 세미콜론(;)이 문장 종료로 해석되지 않도록 구분자를 //로 임시 변경합니다.
  • DROP PROCEDURE IF EXISTS: 같은 이름의 프로시저가 이미 존재할 경우 오류를 방지하기 위해 먼저 삭제합니다.
  • REPEAT ... UNTIL: 카운터 변수 @i가 5에 도달할 때까지 반복 실행됩니다.
  • RAND(): 0 이상 1 미만 범위의 부동소수점 난수를 반환하는 MySQL 내장 함수입니다.

프로시저 호출하여 결과 확인하기

구분자를 원래대로 되돌린 후 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)

실행할 때마다 결과값은 달라지며, 위 예제에서는 0과 1 사이의 서로 다른 난수 5개가 각각 출력된 것을 확인할 수 있습니다.

참고: 정수 범위의 난수가 필요한 경우

만약 0과 1 사이의 소수가 아니라 특정 정수 범위의 난수가 필요하다면 FLOOR(RAND() * N) 형태로 응용할 수 있습니다. 예를 들어 1부터 100 사이의 정수 난수를 얻으려면 다음과 같이 작성합니다.

SELECT FLOOR(1 + RAND() * 100) AS 'Random Number';

이처럼 저장 프로시저와 RAND() 함수를 조합하면 테스트 데이터 생성, 샘플링 등 다양한 상황에서 유용하게 활용할 수 있습니다.