※ DBMS_RANDOM 패키지의 기본 개념과 사용 방법입니다.
제23장 DBMS_RANDOM
본 절에서는 DBMS_RANDOM 패키지에서 제공하는 프러시저와 함수를 알파벳 순으로 설명한다. 새로운 seed를 지정하여 임의값 생성 시퀀스를 새로 생성한다. 기존과 동일한 seed를 지정하면 동일 시퀀스 내의 첫 번째 값으로 돌아가므로 매 호출 후 임의값을 추출하면 같은 값이 나온다. SEED 프러시저의 세부 내용은 다음과 같다. 프로토타입 seed가 번호인 경우 DBMS_RANDOM.SEED ( val IN BINARY_INTEGER ); seed가
technet.tmaxsoft.com
DBMS_RANDOM 개요
DBMS_RANDOM은 임의의 숫자를 생성하는 기능을 제공한다.
NORMAL
표준 정규 분포(가우스 분포)에서의 임의값을 추출하는 함수이다.
SELECT LEVEL NO
, DBMS_RANDOM.NORMAL
FROM DUAL
CONNECT BY LEVEL <= 10;

RANDOM
-(2의 31제곱)보다 크거나 같고, 2의 31제곱보다 작은 임의의 정수를 생성한다.
SELECT LEVEL NO
, DBMS_RANDOM.RANDOM
FROM DUAL
CONNECT BY LEVEL <= 10;

STRING
임의의 문자열을 생성한다.
▶ 프로토타입
DBMS_RANDOM.STRING
(
opt IN CHAR,
len IN NUMBER
)
RETURN VARCHAR2;
▶파라미터
파라미터 | 설명 |
opt |
생성하고 싶은 문자열의 형태이고, 항목은 아래와 같다.
그 외의 값일 경우에는 기본적으로 대문자 알파벳의 문자열이다. |
len |
생성할 문자열의 길이이다. |
SELECT DBMS_RANDOM.STRING('u', 15) AS "u_Val"
, DBMS_RANDOM.STRING('U', 15) AS "U_Val"
, DBMS_RANDOM.STRING('l', 15) AS "l_Val"
, DBMS_RANDOM.STRING('L', 15) AS "L_Val"
, DBMS_RANDOM.STRING('a', 15) AS "a_Val"
, DBMS_RANDOM.STRING('A', 15) AS "A_Val"
, DBMS_RANDOM.STRING('x', 15) AS "x_Val"
, DBMS_RANDOM.STRING('X', 15) AS "X_Val"
, DBMS_RANDOM.STRING('p', 15) AS "p_Val"
, DBMS_RANDOM.STRING('P', 15) AS "P_Val"
FROM DUAL
CONNECT BY LEVEL <= 10;

VALUE
범위 내에서 임의의 숫자를 생성한다. 범위가 지정되지 않은 경우는 0보다 크거나 같고 1보다 작은 숫자를 생성한다.
▶ 프로토타입
-- 범위가 지정되기 않은 경우
DBMS_RANDOM.VALUE
RETURN NUMBER;
-- 범위가 지정된 경우
DBMS_RANDOM.VALUE
(
low IN NUMBER,
high IN NUMBER
)
RETURN NUMBER;
▶파라미터
파라미터 | 설명 |
low | 임의값 범위 내에서의 최솟값이다. |
high | 임의값 범위 내에서의 최댓값은 이 값보다 크거나 같을 수 없다. |
SELECT DBMS_RANDOM.VALUE AS VAL1
, DBMS_RANDOM.VALUE(1, 10) AS VAL2
, DBMS_RANDOM.VALUE(100, 1000) AS VAL3
, TRUNC(DBMS_RANDOM.VALUE(1000, 10000)) AS VAL4
FROM DUAL
CONNECT BY LEVEL <= 10;

응용
100에서 5000 사이의 임의의 수 조회
SELECT DBMS_RANDOM.VALUE(100, 5000) RANDOM
FROM DUAL;
-- 결과
298.572076200662881978849765110970857037
10에서 100 사이의 임의의 정수 조회
SELECT TRUNC(DBMS_RANDOM.VALUE(10, 100)) RANDOM
FROM DUAL;
-- 결과
33
Table 랜덤하게 정렬 : Order by 절에 DBMS_RANDOM.RANDOM() 응용
SELECT *
FROM EMP
WHERE ROWNUM <=10
ORDER BY DBMS_RANDOM.RANDOM()

랜덤한 문자열 출력
SELECT DBMS_RANDOM.STRING('U', 10) AS "대문자"
, DBMS_RANDOM.STRING('L', 10) AS "소문자"
, DBMS_RANDOM.STRING('A', 10) AS "영문자"
, DBMS_RANDOM.STRING('X', 10) AS "영숫자"
, DBMS_RANDOM.STRING('P', 10) AS "문자혼합"
FROM DUAL
CONNECT BY LEVEL <= 20;

관련글
'IT > 데이터베이스' 카테고리의 다른 글
DBeaver 실행 쿼리 히스토리 보기 (0) | 2020.03.23 |
---|---|
오라클 날짜 함수 (0) | 2020.03.16 |
오라클 피벗(Pivot) (0) | 2020.03.10 |
오라클 버전 확인 하기 (0) | 2020.03.10 |
오라클 순번 채번 CONNECT BY LEVEL 활용하기 (5) | 2020.02.25 |
최근댓글