Oracle Database TIP
랜덤 데이터 생성 및 램덤한 순서로 정렬(DBMS_RANDOM) 6 1 34,339

by 김정식 DBMS_RANDOM 난수 랜덤 DBMS_RANDOM.VALUE DBMS_RANDOM.STRING DBMS_RANDOM.RANDOM [2002.05.29]


DBMS_RANDOM 패키지를 사용하면 숫자와 문자의 랜덤 데이터를 생성 할 수 있으며, 테이블 데이터를 램덤한 순서로 정렬하여 조회 할 수 있다.

DBMS_RANDOM.VALUE

  • - 랜덤한 숫자를 생성한다.
  • - Syntax : DBMS_RANDOM.VALUE(low IN NUMBER, high IN NUMBER)
  • - 파라미터 low는: 최소 범위, high는: 최대 범위 값이다.
-- 1000에서 10000만 사이의 임이의 수를 조회한다. 
SELECT DBMS_RANDOM.VALUE(1000, 10000) rand FROM DUAL;


-- 아래와 같이 소수점 까지 생성되는 것을 확인 할 수 있다. 
RAND
----------
5942.39469


-- 정수로만 1000에서 10000만 사이의 임이의 수를 10개를 생성해 보자 (빈칸을 채워보자)
SELECT CEIL(DBMS_RANDOM.VALUE(1000, 10000)) rand 
FROM DUAL
CONNECT BY LEVEL <= 10;


-- 아래와 같이 정수가 조회되는 것을 확인 할 수 있다. 
RAND
------
  7228
  3686
  8998
  5591
  ...

DBMS_RANDOM.STRING

  • - 랜덤한 문자열을 생성한다.
  • - Syntax : DBMS_RANDOM.STRING opt IN CHAR, len IN NUMBER)
  • - opt (옵션)은 아래와 같다.
  • 'u', 'U' : 대문자
  • 'l', 'L' : 소문자
  • 'a', 'A' : 대소문자 구분없는 영문자
  • 'x', 'X' : 영문자와 숫자 혼합
  • 'p', 'P' : 문자 혼합
-- WITH문을 활용해서 옵션을 한 번에 조회해 보자
WITH t AS(
    SELECT DBMS_RANDOM.STRING('U',  10) rand FROM DUAL -- 대문자
    UNION ALL
    SELECT DBMS_RANDOM.STRING('L',  10) rand  FROM DUAL -- 소문자
    UNION ALL
    SELECT DBMS_RANDOM.STRING('A',  10) rand  FROM DUAL -- 영문자
    UNION ALL 
    SELECT DBMS_RANDOM.STRING('X',  10) rand FROM DUAL -- 영숫자
    UNION ALL 
    SELECT DBMS_RANDOM.STRING('P',  10) rand FROM DUAL  --문자혼합
)
SELECT * FROM t;


-- 아래와 같이 랜덤한 문자열이 조회되는 것을 확인 할 수 있다. 
RAND
-----------
NSBJGKKQCL
iumlemfhtd
BGycevXKpp
JVM7L9COBI
7tdKU83j@{

DBMS_RANDOM.RANDOM

  • - DBMS_RANDOM.RANDOM은 랜덤 한 숫자를 생성해 준다.
  • - 한번 실행해 보자 SELECT DBMS_RANDOM.RANDOM FROM DUAL
  • - DBMS_RANDOM.RANDOM 함수를 이용하면 데이터를 랜덤한 순서로 정렬 할 수 있다.
-- 랜덤하게 정렬하여 3개의 로우를 출력한다. 
SELECT * 
  FROM
     (SELECT * 
        FROM emp 
       ORDER BY DBMS_RANDOM.RANDOM()) 
 WHERE ROWNUM <= 3;


-- 위 SQL을 여러번 반복해서 실행해 보자..
  EMPNO ENAME                JOB              MGR HIREDATE        SAL       COMM     DEPTNO
------- -------------------- --------- ---------- -------- ---------- ---------- ----------
   7782 CLARK                MANAGER         7839 81/06/09       2450                    10
   7902 FORD                 ANALYST         7566 81/12/03       3000                    20
   7876 ADAMS                CLERK           7788 87/05/23       1100                    20

- 강좌 URL : http://www.gurubee.net/lecture/1400

- 구루비 강좌는 개인의 학습용으로만 사용 할 수 있으며, 다른 웹 페이지에 게재할 경우에는 출처를 꼭 밝혀 주시면 고맙겠습니다.~^^

- 구루비 강좌는 서비스 제공을 위한 목적이나, 학원 홍보, 수익을 얻기 위한 용도로 사용 할 수 없습니다.

by 손님 [2012.03.15 16:09:51]

sdf
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입