0%

oracle dbms_random 오라클 랜덤 값 생성하기

oracle

오라클에서는 랜덤한 값을 생성하기 위해 DBMS_RANDOM이란 패키지를 제공합니다.
이 패키지 안에 있는 함수와 프로시저들을 알아보겠습니다.

요약

프로시저/함수설명
NORAMAL 함수정규분포(가우스 분포)에서 특정한 숫자를 리턴합니다
RANDOM 함수임의의 숫자를 리턴합니다
SEED 프로시저seed값을 리셋합니다
STRING 함수임의의 문자열을 리턴합니다
VALUE 함수두 개의 숫자 파라미터 범위 내의 임의의 정수를 가져옵니다.

NORAML 함수

표준 정규 분포(가우스 분포)에서의 임의값을 추출하는 함수입니다.

1
2
3
4
5
6
7
8
9
-- 프로토 타입
DBMS_RANDOM.NORMAL
RETURN NUMBER;

-- 쿼리 예
SELECT DBMS_RANDOM.NORMAL FROM DUAL;

-- 출력 예
-- 1.02863830167819718693651743539890024055

RANDOM 함수

-(2의 31제곱)보다 크거나 같고, 2의 31제곱보다 작은 임의의 정수를 생성합니다.

1
2
3
4
5
6
7
8
9
-- 프로토 타입
DBMS_RANDOM.RANDOM
RETURN BINARY_INTEGER;

-- 쿼리 예
SELECT DBMS_RANDOM.RANDOM FROM DUAL;

-- 출력 예
-- -672618330

SEED 프로시저

새로운 seed를 지정하여 임의값 생성 시퀀스를 새로 생성합니다.
기존과 동일한 seed를 지정하면 동일 시퀀스 내의 첫 번째 값으로 돌아가므로,
매 호출 후 임의값을 추출하면 같은 값이 나옵니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
-- 프로토타입
DBMS_RANDOM.SEED
(
val IN BINARY_INTEGER -- 임의값을 생성할 seed 번호나 문자열
);

DBMS_RANDOM.SEED
(
val IN VARCHAR2 --임의값을 생성할 seed 번호나 문자열
);


-- 쿼리 예
DBMS_RANDOM.SEED(3);

STRING 함수

임의의 문자열을 생성합니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
-- 프로토타입
DBMS_RANDOM.STRING
(

opt IN CHAR, -- 생성하고 싶은 문자열의 형태
-- 'u' 또는 'U': 대문자 알파벳의 문자열
-- 'l' 또는 'L': 소문자 알파벳의 문자열
-- 'a' 또는 'A': 대소문자 구분 없이 임의의 알파벳의 문자열
-- 'x' 또는 'X': 임의의 대문자 알파벳 또는 숫자의 문자열
-- 'p' 또는 'P': 임의의 출력 가능한 문자들의 배열
-- 그 외의 값일 경우에는 기본적으로 대문자 알파벳의 문자열
len IN NUMBER --생성할 문자열의 길이
)
RETURN VARCHAR2;

-- 쿼리 예
SELECT DBMS_RANDOM.STRING('a', 1) FROM DUAL;

-- 출력 예
-- N

VALUE 함수

범위 내에서 임의의 숫자를 생성합니다.
범위가 지정되지 않은 경우는 0보다 크거나 같고, 1보다 작은 숫자를 생성합니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
-- 프로토 타입
DBMS_RANDOM.VALUE
(
low IN NUMBER,
high IN NUMBER
)
RETURN NUMBER;

-- 쿼리 예
SELECT DBMS_RANDOM.VALUE(3, 100) FROM DUAL;

-- 출력 예
-- 27.44551905499295525401846162094624981733

reference : https://docs.oracle.com/database/timesten-18.1/TTPLP/d_random.htm#TTPLP040