오라클 랜덤쿼리 질문 0 6 1,381

by 궁금이 [Oracle 기초] [2017.07.26 08:18:42]


 

아래와 같이 쿼리가 있는데요, 쿼리를 실행할때마다 emp_no 값이 랜덤하게 원본컬럼값과 각각 다르게 기존 데이타 범위내에서 모두 배치가 되야 하고 

emp_nm, birth_day 의 컬럼값은 항상 변하지 않는 고정값입니다.

즉, 쿼리를 실행할때마다 결과1 ~ 결과4 중에서 하나이여야 합니다.

WHERE 조건을 주지않고, SELECT 문안에 스칼라 서브쿼리를 이용하여 구현 가능할까요?

dbms_random 이라는 함수를 사용해야 될지 감이 안잡히네요.. 

결과시 레코드의 순서는 상관없습니다

 

-- SQL

WITH T AS

(

          select '12345' emp_no, '홍길동' emp_nm, '780302' birth_day  from dual

union all select '22345'       , '임꺽정'       , '880302'            from dual

union all select '32345'       , '장길산'       , '980302'            from dual

)

SELECT emp_no

     , emp_nm

     , birth_day

FROM T

;

 

 

-- 결과1

EMP_NO EMP_NM BIRTH_DAY

22345 홍길동 780302

12345 임꺽정 880302

32345 장길산 980302

 

-- 결과2

EMP_NO EMP_NM BIRTH_DAY

22345 홍길동 780302

32345 임꺽정 880302

12345 장길산 980302

 

-- 결과3

EMP_NO EMP_NM BIRTH_DAY

32345 홍길동 780302

12345 임꺽정 880302

22345 장길산 980302

 

-- 결과4

EMP_NO EMP_NM BIRTH_DAY

32345 홍길동 780302

22345 임꺽정 880302

12345 장길산 980302

 

by 마농 [2017.07.26 09:04:52]

수행할 때마다 다르게 하려면 이전 수행 결과나 수행번호 등을 저장해 두어야 할 듯 한데요?
그렇지 않고서는 불가능 합니다.
조합 가능한 모든 케이스별로 일련번호를 부여한뒤
수행 할때마낟 번호를 증가시켜 하나씩 뽑아야 할 듯.


by 우리집아찌 [2017.07.26 09:13:13]

/* 답에만 맞추었습니다 */se

SELECT EMP_NO , EMP_NM , BIRTH_DAY
  FROM ( SELECT ROWNUM RN
              , emp_nm
              , birth_day
          FROM T
       ) A ,
       (SELECT ROWNUM RN , EMP_NO
          FROM (SELECT EMP_NO 
                   FROM T
                 ORDER BY DBMS_RANDOM.RANDOM())
        ) B
  WHERE A.RN = B.RN
  ORDER BY A.RN  

 


by jkson [2017.07.26 10:06:05]

오차도 오타ㅋㅋ


by 우리집아찌 [2017.07.26 10:08:54]

완전 오타 였네 ㅋㅋㅋㅋ


by jkson [2017.07.26 12:55:28]

결과1~4중에 하나가 '랜덤'으로 나와야한다면 아찌님 댓글처럼 하시면 되고 '순차적'으로 나와야한다면 마농님 말씀처럼 마지막 수행결과를 저장하셔야겠네요.

혹은 시퀀스 하나 만들고 mod(시퀀스,4) 값으로 선택되게 하신다든지..


by 궁금이 [2017.07.26 17:06:26]

오.굿.잘되요.ㅋㅋ.감솨

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