ORA-00920: 관계 연산자가 부적합합니다 오류가 발생하였을 때 해결 방법에 대해 알아보도록 합시다. 해당 오라클 오류의 영문 설명은 invalid relational operator입니다. invalid는 부적합하다거나 유효하지 않다는 의미이고, relational operator가 관계연산자를 뜻합니다.
관계 연산자가 무엇인가요?
오라클에서 가장 처음, 그리고 자주 사용하는 것이 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