랜덤하게 시리얼번호(serial number)혹은 씨디키(cd-key)를 생성해 보자.
아래 쿼리는 간단하게 영문대문자와 숫자로만 구성된 20자리의 랜덤한 문자열을 :n개 만큼 생성한다.
만들어지는 문자열의 경우의 수는 쉽게 계산할 수 있듯이 36^20 = 1.336.. x 10^31 가지가 된다.
문자열에 영문대문자와 숫자만이 나올 수 있도록 해주는 decode 함수의 역할을 주목해 보자.
SELECT MIN (DECODE (MOD (ROWNUM - 1, 20) + 1, 1, val))
|| MIN (DECODE (MOD (ROWNUM - 1, 20) + 1, 2, val))
|| MIN (DECODE (MOD (ROWNUM - 1, 20) + 1, 3, val))
|| MIN (DECODE (MOD (ROWNUM - 1, 20) + 1, 4, val))
|| MIN (DECODE (MOD (ROWNUM - 1, 20) + 1, 5, val))
|| '-'
|| MIN (DECODE (MOD (ROWNUM - 1, 20) + 1, 6, val))
|| MIN (DECODE (MOD (ROWNUM - 1, 20) + 1, 7, val))
|| MIN (DECODE (MOD (ROWNUM - 1, 20) + 1, 8, val))
|| MIN (DECODE (MOD (ROWNUM - 1, 20) + 1, 9, val))
|| MIN (DECODE (MOD (ROWNUM - 1, 20) + 1, 10, val))
|| '-'
|| MIN (DECODE (MOD (ROWNUM - 1, 20) + 1, 11, val))
|| MIN (DECODE (MOD (ROWNUM - 1, 20) + 1, 12, val))
|| MIN (DECODE (MOD (ROWNUM - 1, 20) + 1, 13, val))
|| MIN (DECODE (MOD (ROWNUM - 1, 20) + 1, 14, val))
|| MIN (DECODE (MOD (ROWNUM - 1, 20) + 1, 15, val))
|| '-'
|| MIN (DECODE (MOD (ROWNUM - 1, 20) + 1, 16, val))
|| MIN (DECODE (MOD (ROWNUM - 1, 20) + 1, 17, val))
|| MIN (DECODE (MOD (ROWNUM - 1, 20) + 1, 18, val))
|| MIN (DECODE (MOD (ROWNUM - 1, 20) + 1, 19, val))
|| MIN (DECODE (MOD (ROWNUM - 1, 20) + 1, 20, val)) str
FROM (SELECT CHR (DECODE (SIGN (rand - 10), -1, rand + 48, rand + 55))
val
FROM (SELECT TRUNC (DBMS_RANDOM.VALUE (0, 36)) rand
FROM DUAL
CONNECT BY LEVEL <= 20 * :N)) --이부분이 어려움!!
GROUP BY TRUNC ((ROWNUM - 1) / 20)
#간단한 DECODE,DBMS_RANDOM, MOD,MIN,CHR 만으로 만들어지는 랜덤cd-key만들기 함수..
이해해보자~ -_-;; 보기보단 쉽다..
아래 쿼리는 간단하게 영문대문자와 숫자로만 구성된 20자리의 랜덤한 문자열을 :n개 만큼 생성한다.
만들어지는 문자열의 경우의 수는 쉽게 계산할 수 있듯이 36^20 = 1.336.. x 10^31 가지가 된다.
문자열에 영문대문자와 숫자만이 나올 수 있도록 해주는 decode 함수의 역할을 주목해 보자.
SELECT MIN (DECODE (MOD (ROWNUM - 1, 20) + 1, 1, val))
|| MIN (DECODE (MOD (ROWNUM - 1, 20) + 1, 2, val))
|| MIN (DECODE (MOD (ROWNUM - 1, 20) + 1, 3, val))
|| MIN (DECODE (MOD (ROWNUM - 1, 20) + 1, 4, val))
|| MIN (DECODE (MOD (ROWNUM - 1, 20) + 1, 5, val))
|| '-'
|| MIN (DECODE (MOD (ROWNUM - 1, 20) + 1, 6, val))
|| MIN (DECODE (MOD (ROWNUM - 1, 20) + 1, 7, val))
|| MIN (DECODE (MOD (ROWNUM - 1, 20) + 1, 8, val))
|| MIN (DECODE (MOD (ROWNUM - 1, 20) + 1, 9, val))
|| MIN (DECODE (MOD (ROWNUM - 1, 20) + 1, 10, val))
|| '-'
|| MIN (DECODE (MOD (ROWNUM - 1, 20) + 1, 11, val))
|| MIN (DECODE (MOD (ROWNUM - 1, 20) + 1, 12, val))
|| MIN (DECODE (MOD (ROWNUM - 1, 20) + 1, 13, val))
|| MIN (DECODE (MOD (ROWNUM - 1, 20) + 1, 14, val))
|| MIN (DECODE (MOD (ROWNUM - 1, 20) + 1, 15, val))
|| '-'
|| MIN (DECODE (MOD (ROWNUM - 1, 20) + 1, 16, val))
|| MIN (DECODE (MOD (ROWNUM - 1, 20) + 1, 17, val))
|| MIN (DECODE (MOD (ROWNUM - 1, 20) + 1, 18, val))
|| MIN (DECODE (MOD (ROWNUM - 1, 20) + 1, 19, val))
|| MIN (DECODE (MOD (ROWNUM - 1, 20) + 1, 20, val)) str
FROM (SELECT CHR (DECODE (SIGN (rand - 10), -1, rand + 48, rand + 55))
val
FROM (SELECT TRUNC (DBMS_RANDOM.VALUE (0, 36)) rand
FROM DUAL
CONNECT BY LEVEL <= 20 * :N)) --이부분이 어려움!!
GROUP BY TRUNC ((ROWNUM - 1) / 20)
#간단한 DECODE,DBMS_RANDOM, MOD,MIN,CHR 만으로 만들어지는 랜덤cd-key만들기 함수..
이해해보자~ -_-;; 보기보단 쉽다..
반응형
'아이티 > oracle&DB' 카테고리의 다른 글
오라클에서 Table 정보 및 Column정보 조회하기 / 데이터사전 (0) | 2011.11.17 |
---|---|
msvcp71.dll msvcr71.dll 오류 해결법 (0) | 2011.04.13 |
[ORACLE/SQL] 함수 - 숫자함수 (0) | 2010.02.22 |
Java를 이용한 CLOB, BLOB 조작법 (0) | 2009.11.10 |
DataType 중 Blob을 아세요...??? (0) | 2009.11.10 |
oracle에서 access방법 (0) | 2009.09.29 |
시간간격을 년, 개월, 일수로 보기 (0) | 2009.02.13 |
달력생성쿼리의 새버전을 공개합니다. (0) | 2009.02.13 |
CMD창으로 오라클9i 원격 데이터베이스 접속방법 (0) | 2008.10.27 |
[Oracle] Tablespace 크기 및 상태 점검을 위한 쿼리 (0) | 2008.10.09 |