ORA-00976: Specified pseudocolumn or operator not allowed here
Environment
- Language: Oracle
Problem
SELECT LEVEL-1 HOURS
, NVL(COUNT(TO_CHAR(DATETIME, 'FMHH24')), 0) COUNT
FROM DUAL
RIGHT JOIN ANIMAL_OUTS
ON (LEVEL-1) = TO_CHAR(DATETIME, 'FMHH24')
CONNECT BY LEVEL <= 24
ORDER BY LEVEL
;
Cause of Problem
LEVEL 같은 의사컬럼이나 연산자가 허용되지 않는 위치에 사용됨
LEVEL 의사컬럼은 FROM 절에서 직접적으로 사용될 수 없고, CONNECT BY 절에서 계층형 쿼리를 구성할 때 사용되어야 함
- pseudocolumn(의사컬럼): 테이블의 컬럼처럼 동작하지만 실제로 테이블에 저장되지는 않는 컬럼
Solution
- LEVEL의 위치를 FROM절에서 CONNECT BY절로 이동
SELECT LEVEL-1 HOURS
, NVL(
(SELECT COUNT(*)
FROM ANIMAL_OUTS
WHERE TO_CHAR(DATETIME, 'HH24') = TO_CHAR(LEVEL-1, 'FM00')), 0) COUNT
FROM DUAL
CONNECT BY LEVEL <= 24
ORDER BY LEVEL
;
📚 참고 자료
'DataBase > Oracle with Error' 카테고리의 다른 글
[해결 방법] ORA-00937: not a single-group group function (0) | 2023.09.28 |
---|---|
[해결 방법] ORA-01821: date format not recognized (0) | 2023.09.17 |
[해결 방법] ORA-00932: inconsistent datatypes: expected DATE got NUMBER (0) | 2023.09.17 |
[해결 방법] ORA-01861: literal does not match format string (0) | 2023.09.17 |
[해결 방법] ORA-00960: ambiguous column naming in select list (0) | 2023.09.10 |