PL/SQL dbms_random.value() 질문 0 6 2,211

by 오라클 [PL/SQL] pl/sql [2015.08.04 13:44:57]


SELECT * 
        FROM employees
       ORDER BY DBMS_RANDOM.value()

 

order by가 실수로 정렬이 안 될텐데, 이게왜 되는지 궁금합니다. 관련 링크도 첨부해주시면 감사하겠습니다.

by 창조의날개 [2015.08.04 14:02:17]

SELECT DBMS_RANDOM.value() FROM DUAL;

 

위 쿼리를 실행해 보시면 렌덤값을 출력합니다.

그러므로 ORDER BY를 무작위로 하기 위해서 쓴듯합니다.


by 마농 [2015.08.04 14:08:42]

ORDER BY 절에 올 수 있는 것은
1. 컬럼 이나 표현식(값, 계산식, 함수 등) 이 있고요.
  - 해당 표현식의 값으로 정렬하라는 의미
2. 또한 조회 컬럼의 번호가 올 수도 있습니다.(예 : ORDER BY 1, 2)
  - 해당 순번에 있는 컬럼의 값으로 정렬하라는 의미


질문을 하신 이유는... 2번과 1번을 혼동하신 듯 하네요.


by 오라클 [2015.08.04 15:19:23]

2번 형태를 의도하고 썼어요.

그런데 DBMS_RANDOM.value() 반환치가 0.324535 이런 실수치를 반환하는데

컬럼순서에 0.32번째는 없는데도 정렬이 된다는 게 이상합니다


by 마농 [2015.08.04 16:13:29]

바로 그거죠.

잘못 생각하신 것입니다.

2번처럼 쓰려면 숫자를 직접 쓰는거에요.

사용하신 방법은 1번 표현식을 쓴 방법이죠.

1번과 2번은 전혀 의미가 다릅니다.


by jkson [2015.08.04 15:20:53]
SELECT DBMS_RANDOM.value() RVAL, A.* 
  FROM 테이블 A
 ORDER BY RVAL

이것과 같은 의미라 생각하시면 됩니다.


by 오라클 [2015.08.04 17:55:19]

예 감사합니다. 제가 스스로 더 학습할게요

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