UNION ALL SORT부분에서 DECODE를 쓰니깐 ORA-01785가 뜨면서 'ORDER BY 항목은 SELECT 목록식의 수라야 합니다.'
라고 뜹니다. DECODE를 안쓰면 정렬이 오류 없이 되는데 DECODE만 쓰면 오류가 뜹니다.
그리고 UNION ALL JOIN을 안쓰고 SELECT ..FROM 절에 DECODE를 쓰면 오류없이 결과값이 나옵니다.
SELECT
FROM
WHERE
UNION ALL
SELECT
FROM
WHERE
UNION ALL
SELCET
FROM
WHERE
UNION ALL
SELCET
FROM
WHERE
UNION ALL
SELECT
FROM
WHERE
ORDER BY DECODE(...)
이런 구문인데 제가 괄호를 안넣어서 그런지 UNION ALL에서 ORDER BY DECODE가 원래 안되는지 모르겠습니다.
이틀째 고민중입니다. ^^;;;
답변>
SELECT * FROM (
SELECT * FROM EMP WHERE EMPNO BETWEEN 7300 AND 7500 UNION ALL
SELECT * FROM EMP WHERE EMPNO BETWEEN 7501 AND 7700 UNION ALL
SELECT * FROM EMP WHERE EMPNO BETWEEN 7701 AND 8000)
ORDER BY DECODE(DEPTNO, 10, 4,
20, 2,
30, 1)
출처 : http://www.devpia.com/Maeul/Contents/Detail.aspx?BoardID=38&MaeulNo=16&no=70794&ref=70794
나의 경우에는 ORDER BY 절에 FUNCTION 이 들어있었는데 해당 컬럼을 SELECT 하지 않아서 생기는 문제 같았다.
위의 답변과 같이 한번 더 감싸고 ORDER BY 절에 FUNCTION을 그대로 두니 정상적으로 작동.
'DB' 카테고리의 다른 글
오라클 lock 해결방법 (0) | 2013.01.31 |
---|---|
잠금 대기중 시간이 초과됐습니다 (0) | 2013.01.30 |
ORACLE GRANT SELECT (0) | 2013.01.15 |
ORACLE 9I NVL('STR','')='STR' (0) | 2013.01.15 |
mysql db 튜닝 (0) | 2013.01.11 |