'ORA-00936: missing expression' 오류를 해결해 보도록 합시다. 번역에서도 볼 수 있듯이 말 그대로 '누락된 표현'이 문제인데요, 작성한 쿼리가 예상치 않게 끝난 경우에 발생하는 경우가 많습니다. 🙂
ORA-00936: 누락된 표현식입니다.
ORA-00936 오류의 공통적인 원인은 SQL 구문에서 표현이 누락되었거나 잘못된 구문으로 인해 발생합니다. 특히, 다음과 같은 경우에 발생할 수 있습니다. 살펴보도록 할게요. 🙂
SELECT 절에서 콤마
주로 SELECT 구문에서 컬럼 이름 사이에 콤마가 잘못 사용하는 경우에 'ORA-00936: 누락된 표현식입니다.' 오류가 발생할 수 있습니다. SELECT 절의 마지막에 불필요한 콤마가 있어 오류가 발생하는 예제를 살펴보겠습니다.
SELECT EMPNO, ENAME, JOB,
FROM EMP
WHERE DEPTNO = 10;
ERROR at line 1:
ORA-00936: missing expression
FROM 앞에 콤마를 실수로 하나 추가하였는데요, 이 때에 발생할 수 있습니다. 콤마 다음에 다른 컬럼을 예상했는데, FROM 키워드가 왔기에 '누락된 표현'이 되는 것이지요. 올바르게 수정하면 다음과 같습니다.
SELECT EMPNO, ENAME, JOB
FROM EMP
WHERE DEPTNO = 10;
EMPNO ENAME JOB
---------- -------------------- ------------------
7782 CLARK MANAGER
7934 MILLER CLERK
7839 KING PRESIDENT
WHERE 절이 잘못 작성된 경우
조건을 덧붙이기 위해 WHERE 절을 사용했는데, 이후에 조건 표현을 입력하지 않는 경우에 발생할 수 있습니다.
SELECT * FROM EMP WHERE;
ERROR at line 1:
ORA-00936: missing expression
조건이 필요 없다면 WHERE 절을 지워야 할 것이며, 조건이 필요하다면 컬럼 표현을 덧붙여야 할 것입니다.
SELECT * FROM EMP WHERE 0 = 0;
14 rows selected.
INSERT 할 때에 콤마
INSERT VALUES 절을 사용할 때에, 나열한 컬럼에 콤마를 누락하는 경우에 발생할 수 있습니다.
--콤마가 맨 끝에 있는 경우
INSERT INTO EMP (EMPNO, ENAME) VALUES (9999,);
ERROR at line 1:
ORA-00936: missing expression
--콤마가 맨 앞에 있는 경우
INSERT INTO EMP (EMPNO, ENAME) VALUES (,9999);
ERROR at line 1:
ORA-00936: missing expression
컬럼 리스트를 가져온 다음에 '콤마 + 컬럼 이름'을 가져온다든지, 프로그래밍 방식으로 시도할 때에 가끔 발생할 수 있어요. 아니면 의도치 않은 SQL인젝션 때문에 발생하기도 할 것입니다.
SELECT 테이블 별칭 누락
테이블을 조회할 때에 애스터리스크 이외에 별도의 컬럼을 입력하는 경우, 별칭이 필요할 텐데요, 누락하는 경우에 발생할 수 있습니다.
SELECT EMPNO, * FROM EMP;
ERROR at line 1:
ORA-00936: missing expression
올바른 예시
SELECT EMPNO, EMP.* FROM EMP;
14 rows selected.
SELECT EMPNO, TA.* FROM EMP TA;
14 rows selected.
ORA-00936: missing expression
이와 같이 SQL 구문에서 표현식을 올바르게 작성하면 'ORA-00936: missing expression' 오류를 피할 수 있습니다. 쿼리를 작성할 때는 항상 컬럼 이름과 콤마를 주의 깊게 확인하세요. 예제에서 다룬 것 이외의 사유로 발생할 수도 있으니, 자세히 살펴보면 쉽게 해결할 수 있을 것입니다. 🙂
