ORA-00917 : 쉼표 누락 에러, 원인은 쉼표만이 아니다
ORA-00917 : missing comma 에러는 SQL 문에서 쉼표가 있어야 할 위치에 없을 때 발생합니다. 하지만 실제로는 쉼표와 무관한 문법 실수에서도 자주 나타납니다. 이 글에서는 ORA-00917의 진짜 원인들을 상황별로 정리합니다.

ORA-00917 에러란?
ORA-00917은 SQL 파서가 쉼표(,)가 있어야 할 자리에 다른 토큰을 만났을 때 발생하는 에러입니다.

ORA-00917 : missing comma
(쉼표가 누락되었습니다)
이 에러는 단순히 쉼표를 빠뜨린 경우뿐 아니라, 별칭(Alias) 키워드 실수, 데이터 타입 오류, 예약어 충돌 등에서도 발생합니다. 오라클이 구문을 해석하다가 "여기에 쉼표가 와야 하는데 다른 게 있다"고 판단하기 때문입니다.
주요 발생 원인 5가지
| 번호 | 원인 | 설명 |
|---|---|---|
| 1 | SELECT 절에서 쉼표 누락 | 컬럼 나열 시 쉼표 빠뜨림 |
| 2 | 별칭에 예약어 사용 | AS 없이 예약어를 별칭으로 사용 |
| 3 | INSERT VALUES에서 쉼표 누락 | 값 나열 시 쉼표 빠뜨림 |
| 4 | CREATE TABLE 컬럼 정의 오류 | 데이터 타입 누락, 잘못된 키워드 |
| 5 | 별칭에 작은따옴표 사용 | 별칭을 작은따옴표로 감싼 경우 |
원인 1 : SELECT 절에서 쉼표 누락
가장 직관적인 원인입니다. SELECT 절에서 여러 컬럼을 나열할 때 사이에 쉼표를 빠뜨리면 ORA-00917이 발생합니다.

에러 발생 예시 :
SELECT employee_id first_name last_name FROM employees;
-- ORA-00917
-- 함수 결과와 다음 컬럼 사이 쉼표 누락
SELECT COUNT(*) department_id FROM employees GROUP BY department_id;
해결법 :
SELECT COUNT(*) AS cnt, department_id FROM employees GROUP BY department_id;
원인 2 : 별칭에 예약어 사용
컬럼 별칭으로 오라클 예약어를 사용하면 ORA-00917이 발생할 수 있습니다. 오라클이 별칭이 아닌 키워드로 해석하기 때문입니다.
에러 발생 예시 :
SELECT hire_date date FROM employees;
-- ORA-00917 (date를 별칭이 아닌 키워드로 인식)
-- 별칭 'number'는 예약어
SELECT salary number FROM employees;
해결법 :
SELECT hire_date AS "date" FROM employees;
-- 방법 2 : 예약어가 아닌 별칭 사용 (추천)
SELECT hire_date AS hire_dt FROM employees;
원인 3 : INSERT VALUES에서 쉼표 누락
INSERT 문의 VALUES 절에서 값 사이에 쉼표를 빠뜨리면 ORA-00917이 발생합니다.

에러 발생 예시 :
INSERT INTO employees (employee_id, first_name, salary)
VALUES (100 'John' 5000);
-- ORA-00917
해결법 :
VALUES (100, 'John', 5000);
원인 4 : CREATE TABLE 컬럼 정의 오류
CREATE TABLE에서 데이터 타입을 누락하거나 잘못된 키워드를 사용하면 ORA-00917이 발생합니다.
에러 발생 예시 :
CREATE TABLE test_tbl (
id,
name VARCHAR2(50)
);
-- id 컬럼에 데이터 타입이 없음 → ORA-00917
해결법 :
id NUMBER,
name VARCHAR2(50)
);
원인 5 : 별칭에 작은따옴표 사용
오라클에서 컬럼 별칭에 작은따옴표('')를 사용하면 ORA-00917이 발생합니다. 별칭에 한글이나 특수문자를 쓰려면 큰따옴표("")를 사용해야 합니다.

에러 발생 예시 :
SELECT salary AS '급여' FROM employees;
-- ORA-00917
해결법 :
SELECT salary AS "급여" FROM employees;
-- 영문 별칭은 따옴표 불필요
SELECT salary AS sal FROM employees;
| 용도 | 올바른 따옴표 | 예시 |
|---|---|---|
| 문자열 값 | 작은따옴표 '' | WHERE name = '홍길동' |
| 컬럼 별칭 | 큰따옴표 "" | SELECT sal AS "급여" |
| 테이블 별칭 | 따옴표 없음 | FROM employees e |
자주 묻는 질문 (FAQ)
Q1. 쉼표를 다 넣었는데 ORA-00917이 발생합니다.
별칭에 예약어를 사용했거나, 작은따옴표로 별칭을 지정한 경우일 수 있습니다. 별칭 부분을 확인하세요.
Q2. ORA-00917과 ORA-00923(FROM 키워드 누락)의 차이점은?
둘 다 SELECT 절의 문법 오류에서 발생하지만, ORA-00917은 쉼표가 와야 할 자리에 다른 게 있을 때, ORA-00923은 FROM 키워드를 찾지 못할 때 발생합니다. 원인이 비슷하여 같은 실수에서 버전에 따라 다른 에러가 나올 수 있습니다.
Q3. 긴 SELECT 절에서 쉼표 누락을 쉽게 찾는 방법은?
각 컬럼을 한 줄에 하나씩 작성하면 쉼표 누락을 시각적으로 쉽게 발견할 수 있습니다.
핵심 정리
| 점검 사항 | 확인 방법 |
|---|---|
| SELECT 쉼표 | 컬럼 사이에 쉼표(,)가 있는지 확인 |
| 별칭 예약어 | 예약어를 별칭으로 쓸 때 큰따옴표 사용 |
| INSERT 쉼표 | VALUES 값 사이, 컬럼 목록 사이 쉼표 확인 |
| CREATE TABLE | 모든 컬럼에 데이터 타입이 지정되었는지 확인 |
| 별칭 따옴표 | 별칭은 큰따옴표(""), 문자열은 작은따옴표('') |

'IT' 카테고리의 다른 글
| ORA-00919 invalid function — 잘못된 SQL 함수 에러 원인·해결·예방 (0) | 2026.05.12 |
|---|---|
| ORA-00918 : 컬럼 정의가 애매합니다 - 조인할 때 꼭 알아야 할 것 (0) | 2026.04.08 |
| ORA-00911 : 부적합한 문자 에러, 세미콜론이 범인? (0) | 2026.04.08 |
| ORA-00907 : 오른쪽 괄호 누락, 놓치기 쉬운 원인 총정리 (0) | 2026.04.08 |
| ORA-00904 : 부적합한 식별자, 이것만 확인하면 해결 (0) | 2026.04.08 |
댓글