
오라클 SQL을 작성하다 보면 예상치 못하게 마주하는 오류 중 하나가 ORA-00936: missing expression입니다. 이 오류는 단순해 보이지만, 실제로는 SQL 구문 내 문법적인 미세한 실수에서 비롯되는 경우가 많아 빠른 디버깅이 어렵습니다. 본 글에서는 단순한 문법 오류를 넘어 실제 실무에서 자주 마주치는 ORA-00936 오류 상황을 다각도로 분석하고, 이를 예방하고 해결할 수 있는 전략을 체계적으로 제공합니다. 실무 담당자가 반드시 이해하고 있어야 할 실전 중심의 해결법을 위주로 정리했으며, 각 사례마다 코드 예제도 함께 제공합니다.
1. ORA-00936 오류란?
ORA-00936 오류는 오라클에서 필수적인 표현식(expression)이 누락되었을 때 발생합니다. 즉, SQL 구문의 특정 위치에 값 또는 연산이 있어야 하는데, 해당 위치가 비어 있거나 잘못된 경우 발생하는 오류입니다.
오류 메시지: ORA-00936: missing expression
2. 오류 발생의 전형적인 패턴
| 유형 | 원인 | 예시 |
|---|---|---|
| SELECT 누락 | SELECT 키워드 다음에 컬럼명이 없음 | SELECT FROM employees; |
| 컬럼명 누락 | 표현식 자리 비워짐 | SELECT , salary FROM employees; |
| 잘못된 괄호 사용 | 서브쿼리에서 표현식이 없음 | SELECT ( FROM dual; |
| 연산자 오류 | 연산자 앞뒤 값 중 하나가 누락 | SELECT salary + FROM employees; |
3. 실무에서 자주 발생하는 ORA-00936 사례 분석
3-1. SELECT 문에서 컬럼 누락
-- 잘못된 SQL
SELECT FROM employees;
-- 오류 발생: ORA-00936: missing expression
해결: SELECT 다음에 반드시 조회할 컬럼이나 표현식이 있어야 합니다.
-- 올바른 SQL
SELECT * FROM employees;
3-2. 리스트 중 콤마 오류
-- 잘못된 SQL
SELECT first_name, , salary FROM employees;
해결: 콤마 사이에 비어 있는 컬럼 위치를 제거하거나 수정해야 합니다.
-- 올바른 SQL
SELECT first_name, salary FROM employees;
3-3. IN 또는 VALUES 절에서 표현식 누락
-- 잘못된 SQL
SELECT * FROM employees WHERE department_id IN ();
해결: IN 절 내에는 반드시 하나 이상의 값 또는 서브쿼리가 존재해야 합니다.
-- 올바른 SQL
SELECT * FROM employees WHERE department_id IN (10, 20, 30);
3-4. 연산자 사용 시 피연산자 누락
-- 잘못된 SQL
SELECT salary + FROM employees;
해결: 연산자 앞뒤에 올바른 값 또는 컬럼이 있어야 합니다.
-- 올바른 SQL
SELECT salary + 1000 FROM employees;
4. 오류 예방을 위한 실전 전략
- SQL 작성 시 SELECT, FROM, WHERE 절의 기본 틀을 우선 작성하고, 그 안을 채워나가는 방식 권장
- SQL 툴의 하이라이팅 기능을 활용하여 문법 오류를 사전에 확인
- IN, VALUES, 연산자 사용 시 항상 양쪽 피연산자 또는 항목의 존재 여부 확인
- 자동 완성 기능(Auto-complete)을 활용하여 실수 가능성 최소화
5. 오류 발생 원인과 해결 방법 요약
| 오류 유형 | 발생 원인 | 해결 방법 |
|---|---|---|
| SELECT 절 누락 | SELECT 뒤에 컬럼명이 없음 | SELECT 다음에 조회할 컬럼 지정 |
| 콤마 오류 | 컬럼 목록 중 공백 또는 불완전한 항목 | 콤마 위치 재검토 및 불필요한 공백 제거 |
| 서브쿼리 표현식 없음 | () 안에 값 또는 서브쿼리 누락 | IN/VALUES 절 내 표현식 추가 |
| 연산자 오류 | 연산자 앞 또는 뒤 값 없음 | 연산 양쪽 모두 피연산자 지정 |
6. SQL 작성 시 체크리스트
- SELECT 구문 내 누락된 표현식이 없는가?
- 모든 괄호는 짝이 맞는가?
- IN, VALUES 등의 리스트에 값이 포함되어 있는가?
- 연산자는 양쪽에 값 또는 컬럼이 존재하는가?
- 서브쿼리는 SELECT 구문으로 시작하는가?
7. 마치며
ORA-00936 오류는 사소한 실수로 인해 발생하지만, 원인을 정확히 이해하지 못하면 해결에 많은 시간이 소요될 수 있습니다. 실무에서 자주 발생하는 오류 유형을 습득하고, 예방 습관을 들이는 것이 중요합니다. 특히 자동화 도구에 의존하기보다는 SQL 문 자체의 구조를 숙지하고, 각 구문이 가지는 문법적 요구 사항을 체화하는 것이 오류를 줄이는 핵심입니다.
출처
- Oracle 공식 문서: https://docs.oracle.com/en/database/
- Stack Overflow - ORA-00936 관련 Q&A: https://stackoverflow.com/questions/tagged/ora-00936
'Database > Oracle' 카테고리의 다른 글
| [ORACLE] ORA-01000 : 최대 커서 수 초과 오류 해결 및 예방 가이드 (0) | 2025.07.27 |
|---|---|
| [ORACLE] ORA-00933 오류 해결 : SQL 명령어가 정확하지 않을 때 발생하는 핵심 원인과 대처 방법 (0) | 2025.07.27 |
| [ORACLE] ORA-00918 : 오류 원인과 해결 방법 완전 정복 (0) | 2025.07.27 |
| [ORACLE] ORA-00904 : 원인과 실무 중심의 해결 가이드 (0) | 2025.07.27 |
| [ORACLE] ORA-00902 : 원인 사례 별 진단 및 실무 해결 전략 (0) | 2025.07.27 |