본문 바로가기
DataBase/Oracle with Error

[해결 방법] ORA-00976

by HJ0216 2023. 12. 25.

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
;

 

📚 참고 자료