반응형
안녕하세요. 오늘은 오라클(Oracle) DBMS_RANDOM에 대해 알아보고 응용해서 로또 번호 생성 추출 쿼리까지 알아보겠습니다.
DBMS_RANDOM란?
- 숫자와 문자 데이터를 랜덤하게 생성하여 리턴해주는 패키지 입니다.
DBMS_RANDOM 종류
1. DBMS_RANDOM.VALUE
- 랜덤한 숫자를 생성하여 리턴해줍니다.
- DBMS_RANDOM.VALUE(min, max) min: 최소값, max: 최대값
2. DBMS_RANDOM.STRING
- 랜던한 문자열을 생성하여 리턴해줍니다.
- DBMS_RANDOM.STRING('옵션', '문자열길이')
옵션 종류 | 옵션 설명 |
'l' or 'L' | 소문자만 리턴 |
'u' or 'U' | 대문자만 리턴 |
'x' or 'X' | 영문자와 숫자혼합하여 리턴 |
'a' or 'A' | 대문자와 소문자 구분없이 리턴 |
'p' or 'P' | 문자와 혼합하여 리턴 |
3. DBMS_RANDOM.RANDOM
- 랜덤한 숫자를 생성하여 리턴해줍니다.
- DBMS_RANDOM.RANDOM()
- 데이터를 랜덤하게 정렬이 가능합니다.
DBMS_RANDOM 랜덤 정렬 예시
WITH TEMP_USER AS (
SELECT 1 AS SEQ, 'a' AS ID, '홍길동' AS NAME, 32 AS AGE, 1 AS SEX_CD FROM DUAL UNION ALL
SELECT 2 AS SEQ, 'b', '홍길순', 62, 2 FROM DUAL UNION ALL
SELECT 3 AS SEQ, 'c', '김철수', 52, 1 FROM DUAL UNION ALL
SELECT 4 AS SEQ, 'd', '김영희', 45, 2 FROM DUAL UNION ALL
SELECT 5 AS SEQ, 'e', '강철진', 17, 1 FROM DUAL UNION ALL
SELECT 6 AS SEQ, 'f', '권용태', 26, 1 FROM DUAL UNION ALL
SELECT 7 AS SEQ, 'g', '김지은', 24, 2 FROM DUAL UNION ALL
SELECT 8 AS SEQ, 'h', '서석대', 28, 1 FROM DUAL UNION ALL
SELECT 9 AS SEQ, 'i', '김진민', 18, 2 FROM DUAL UNION ALL
SELECT 10 AS SEQ, 'j', '나호철', 9, 0 FROM DUAL
)
SELECT SEQ
, ID
, NAME
, AGE
, SEX_CD
, CASE WHEN SEX_CD = '1' THEN '남자'
WHEN SEX_CD = '2' THEN '여자'
ELSE '성별 판독 불가'
END AS SEX_NM
FROM TEMP_USER
ORDER BY DBMS_RANDOM.RANDOM();
ORDER BY에 DBMS_RANDOM.RANDOM()를 사용하여 랜덤하게 정렬된 결과를 볼수있습니다.
아주 간단합니다.
DBMS_RANDOM 로또 번호 생성
SELECT MIN(DECODE(MOD(ROWNUM - 1, 6) + 1, 1, num)) no1,
MIN(DECODE(MOD(ROWNUM - 1, 6) + 1, 2, num)) no2,
MIN(DECODE(MOD(ROWNUM - 1, 6) + 1, 3, num)) no3,
MIN(DECODE(MOD(ROWNUM - 1, 6) + 1, 4, num)) no4,
MIN(DECODE(MOD(ROWNUM - 1, 6) + 1, 5, num)) no5,
MIN(DECODE(MOD(ROWNUM - 1, 6) + 1, 6, num)) no6
FROM (
SELECT grp, num
FROM (
SELECT grp, num, MOD(ROWNUM - 1, 45) + 1 rnum
FROM (
SELECT CEIL(LEVEL / 45) grp, MOD(LEVEL - 1, 45) + 1 num
FROM DUAL
CONNECT BY LEVEL <= 45
ORDER BY 1, DBMS_RANDOM.VALUE
)
)
WHERE rnum <= 6
ORDER BY grp, num
)
GROUP BY grp;
결과는 생략하겠습니다.
재미로 돌려 보시고 추출된 번호로 로또를 사보는것도 어떨까 생각됩니다.
이상 오라클(Oracle) DBMS_RANDOM에 대해 알아보고 응용해서 로또 번호 생성 추출 쿼리에 대해 알아보았습니다.
반응형
'개발 > Oracle' 카테고리의 다른 글
오라클(Oracle) INSTR 함수 사용법 및 문법 설명 및 예시 (75) | 2023.02.19 |
---|---|
[Oracle] 오라클 case when 설명 사용법 예제 if else (70) | 2023.02.03 |
오라클(Oracle)과 PostgreSQL의 차이점 (22) | 2023.01.30 |
[Oracle] 오라클 WITH 절 사용법 임시테이블 (38) | 2023.01.27 |
[Oracle] 오라클 문자열 합치기(CONCAT, ||) (23) | 2023.01.20 |