IT/데이터베이스

오라클 DBMS_RANDOM 난수/문자 생성하기

forever story 2020. 3. 12. 23:08
반응형

 ※ DBMS_RANDOM 패키지의 기본 개념과 사용 방법입니다.

참고자료 : https://technet.tmaxsoft.com/upload/download/online/tibero/pver-20160406-000002/tibero_pkg/chap_dbms_random.html

 

제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

생성하고 싶은 문자열의 형태이고, 항목은 아래와 같다.

  • 'u' 또는 'U': 대문자 알파벳의 문자열

  • 'l' 또는 'L': 소문자 알파벳의 문자열

  • 'a' 또는 'A': 대소문자 구분 없이 임의의 알파벳의 문자열

  • 'x' 또는 'X': 임의의 대문자 알파벳 또는 숫자의 문자열

  • 'p' 또는 'P': 임의의 출력 가능한 문자들의 배열

그 외의 값일 경우에는 기본적으로 대문자 알파벳의 문자열이다.

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;

 

 

관련글

 

반응형