ORA-00920: 관계 연산자가 부적합합니다 해결하기 (ORA-00920: invalid relational operator)

ORA-00920: 관계 연산자가 부적합합니다 오류가 발생하였을 때 해결 방법에 대해 알아보도록 합시다. 해당 오라클 오류의 영문 설명은 invalid relational operator입니다. invalid는 부적합하다거나 유효하지 않다는 의미이고, relational operator가 관계연산자를 뜻합니다.

관계 연산자가 무엇인가요?

ORA-00920: 관계 연산자가 부적합합니다 해결하기

오라클에서 가장 처음, 그리고 자주 사용하는 것이 SELECT 문장일 것입니다. SELECT문을 통한 조회 시 조건절에 명시하는 부분에 들어가는 연산자가 바로 관계 연산자입니다. 예를 들면 다음과 같은 연산자를 모두 관계 연산자로 볼 수 있습니다.

  • =
  • !=, ^=, <>
  • <
  • <=
  • >
  • >=
  • ALL
  • ANY
  • BETWEEN
  • NOT BETWEEN
  • EXISTS
  • NOT EXISTS
  • IN
  • NOT IN
  • IS NULL
  • IS NOT NULL
  • LIKE
  • NOT LIKE

ORA-00920: 관계 연산자가 부적합합니다

관계 연산자가 부적합하다고 하는 오류는 연산자를 잘못 사용하였거나, 누락한 경우에 발생합니다.

다음은 이퀄 사인을 누락하여 ORA-00920: invalid relational operator 오류가 발생하는 예시입니다.

SELECT *
       FROM EMP
      WHERE EMPNO 7839;

ERROR at line 3:
ORA-00920: invalid relational operator

다음은 이퀄 사인을 바르게 입력하여 정상적으로 출력되는 경우입니다.

SELECT *
       FROM EMP
      WHERE EMPNO = 7839;

     EMPNO ENAME                JOB                       MGR HIREDATE        SAL       COMM     DEPTNO
---------- -------------------- ------------------ ---------- -------- ---------- ---------- ----------
      7839 KING                 PRESIDENT                     96/11/17       5000                    10

다음은 ANY 관계 연산자를 누락하여 오류가 발생하는 예시를 보여드리고 있습니다.😉

--오류가 발생하는 예제
SELECT *
       FROM EMP
      WHERE COMM ANY (100, 300, 500);

ERROR at line 3:
ORA-00920: invalid relational operator

--정상적인 경우
SELECT *
       FROM EMP
      WHERE COMM > ANY (100, 300, 500);

     EMPNO ENAME                JOB                       MGR HIREDATE        SAL       COMM     DEPTNO
---------- -------------------- ------------------ ---------- -------- ---------- ---------- ----------
      7499 ALLEN                SALESMAN                 7698 81/02/20       1600        300         30
      7521 WARD                 SALESMAN                 7698 81/02/22       1250        500         30
      7654 MARTIN               SALESMAN                 7698 81/09/28       1250       1400         30

참고로 ANY연산자는 표현식 내의 어느 하나의 값과 일치하는 부정연산자입니다. 위의 예제는 다음 OR을 사용한 조건과 동일하답니다.

SELECT *
       FROM EMP
      WHERE COMM > 100 OR COMM > 300 OR COMM > 500;

     EMPNO ENAME                JOB                       MGR HIREDATE        SAL       COMM     DEPTNO
---------- -------------------- ------------------ ---------- -------- ---------- ---------- ----------
      7499 ALLEN                SALESMAN                 7698 81/02/20       1600        300         30
      7521 WARD                 SALESMAN                 7698 81/02/22       1250        500         30
      7654 MARTIN               SALESMAN                 7698 81/09/28       1250       1400         30

댓글