Where 절이 Select 절보다 먼저이기 때문에
Select 절의 Alias 를 Where 절에서 사용할 수는 없습니다.
표현식 자체를 조건절에서 직접 사용하거나
SELECT empno , ename , decode(round(dbms_random.value(0,1)), 0, 'man', 'woman') gender FROM emp WHERE decode(round(dbms_random.value(0,1)), 0, 'man', 'woman') = 'man' ;
인라인뷰를 사용하면 밖에서 알리아스를 사용할 수 있습니다.
SELECT * FROM (SELECT empno , ename , decode(round(dbms_random.value(0,1)), 0, 'man', 'woman') gender FROM emp ) WHERE gender = 'man' ;
음.. 일반적인 함수 생각해서 테스트 없이 답변 드렸는데...
테스트 해보니 렌덤 함수는 좀 다른 결과를 내놓는 군요.
첫번째 제시한 방법을 쓰면 안되네요.
렌덤함수를 Where 절에 사용했더니
결과가 모 아니면 도 형태로 나타나네요.(테스트 환경 11g)
결과는 항상 0건 아니면 14건 이 나오며
14건이 나오는 경우 Select 결과는 man 과 woman 이 섞여 나오네요.
이는, 렌덤 함수가 Where 절에서는 단 한번만 수행됨을 의미하며
Where 절과는 별개로 Select 절에서 행수만큼 다시 수행됨을 의미하네요.
원하는 결과를 얻으려면 두번째 방법을 사용하세요.