Oracle ORA-00917 오류 원인과 해결 방법 완벽 가이드

ORA-00917
2026년 06월 17일 | DBMS Error 가이드

이 글에서 다루는 내용

ORA-00917 에러의 원인 분석, 해결 SQL, 예방 방법을 실무 관점에서 정리합니다.

ORA-00917 missing comma 는?

ORA-00917 에러는 Oracle SQL 문장에서 쉼표(,)가 누락되었을 때 발생하는 구문 오류(Syntax Error)입니다. 주로 INSERT, CREATE TABLE, SELECT 문 등에서 컬럼 목록이나 값 목록을 나열할 때 구분자인 쉼표를 빠뜨리거나 잘못 입력한 경우에 발생합니다. 이 에러는 단순한 타이핑 실수에서부터 복잡한 SQL 구조 오해에 이르기까지 다양한 상황에서 나타날 수 있으며, Oracle 파서가 SQL 문법을 검사하는 단계에서 즉시 감지됩니다.


주요 발생 원인

1. INSERT 문에서 VALUES 절의 쉼표 누락

INSERT 문을 작성할 때 VALUES 절에 여러 값을 나열하면서 각 값 사이에 쉼표를 빠뜨리는 경우가 가장 흔한 원인입니다. 특히 값의 개수가 많을 때나 긴 문자열 리터럴을 입력할 때 실수로 쉼표를 생략하면 즉시 이 에러가 발생합니다. 또한 컬럼 목록을 정의하는 부분에서도 동일하게 쉼표가 빠지면 같은 에러가 발생합니다.

2. CREATE TABLE 또는 ALTER TABLE 문에서 컬럼 정의 간 쉼표 누락

테이블을 생성하거나 수정할 때 여러 컬럼을 정의하는 과정에서 컬럼 정의 사이에 쉼표를 생략하면 ORA-00917 에러가 발생합니다. 이 경우 에러 메시지만으로는 정확히 어느 위치에서 쉼표가 빠진 것인지 파악하기 어려울 수 있으므로, 전체 DDL 구문을 꼼꼼히 검토해야 합니다. 특히 컬럼 수가 많은 대형 테이블의 DDL 작성 시 자주 발생하는 실수입니다.

3. SELECT 문의 컬럼 목록 또는 함수 인자에서 쉼표 누락

SELECT 절에서 여러 컬럼을 나열하거나, TO_DATE, NVL, DECODE 같은 다중 인자 함수를 사용할 때 인자 사이의 쉼표를 빠뜨리는 경우에도 이 에러가 발생합니다. 함수 중첩이 깊어질수록 쉼표 위치를 파악하기 어려워져 실수가 잦아집니다. 복잡한 CASE WHEN 구문이나 분석 함수(Analytic Function)를 사용할 때도 주의가 필요합니다.


해결 방법

원인 1 해결: INSERT 문 VALUES 절 수정

잘못된 예시:

-- 쉼표 누락 예시 (에러 발생)
INSERT INTO employees (emp_id, emp_name, dept_id, salary)
VALUES (1001 'John Smith' 10 5000);

올바른 예시:

-- 쉼표 정상 입력 (정상 실행)
INSERT INTO employees (emp_id, emp_name, dept_id, salary)
VALUES (1001, 'John Smith', 10, 5000);

컬럼 목록과 VALUES 절의 각 항목 사이에 반드시 쉼표를 입력해야 합니다. 값의 개수와 컬럼 목록의 개수가 일치하는지도 함께 확인하세요.


원인 2 해결: CREATE TABLE 컬럼 정의 수정

잘못된 예시:

-- 컬럼 정의 사이 쉼표 누락 (에러 발생)
CREATE TABLE employees (
    emp_id    NUMBER(10)
    emp_name  VARCHAR2(100)
    dept_id   NUMBER(5)
    salary    NUMBER(12,2)
    hire_date DATE
);

올바른 예시:

-- 컬럼 정의 사이 쉼표 정상 입력 (정상 실행)
CREATE TABLE employees (
    emp_id    NUMBER(10),
    emp_name  VARCHAR2(100),
    dept_id   NUMBER(5),
    salary    NUMBER(12,2),
    hire_date DATE
);

각 컬럼 정의 끝에 쉼표를 붙이는 것을 원칙으로 하되, 마지막 컬럼 또는 제약 조건 뒤에는 쉼표를 붙이지 않습니다. ALTER TABLE로 컬럼을 추가할 때도 동일한 규칙이 적용됩니다.

-- ALTER TABLE 컬럼 추가 시 올바른 예시
ALTER TABLE employees
ADD (
    email     VARCHAR2(200),
    phone_no  VARCHAR2(20)
);

원인 3 해결: SELECT 문 및 함수 인자 수정

잘못된 예시:

-- SELECT 컬럼 목록 쉼표 누락 (에러 발생)
SELECT emp_id emp_name dept_id
FROM employees
WHERE dept_id = 10;

-- 함수 인자 쉼표 누락 (에러 발생)
SELECT TO_DATE('2024-01-01' 'YYYY-MM-DD') FROM DUAL;

올바른 예시:

-- SELECT 컬럼 목록 쉼표 정상 입력 (정상 실행)
SELECT emp_id, emp_name, dept_id
FROM employees
WHERE dept_id = 10;

-- 함수 인자 쉼표 정상 입력 (정상 실행)
SELECT TO_DATE('2024-01-01', 'YYYY-MM-DD') FROM DUAL;

복잡한 함수 중첩 예시:

-- NVL, TO_CHAR 중첩 사용 시 올바른 예시
SELECT 
    emp_id,
    NVL(TO_CHAR(hire_date, 'YYYY-MM-DD'), 'N/A') AS hire_date_str,
    DECODE(dept_id, 10, 'IT', 20, 'HR', 30, 'Finance', 'Other') AS dept_name
FROM employees
ORDER BY emp_id;

예방 방법

1. SQL Formatter 및 IDE 자동 검사 기능 활용

SQL Developer, DBeaver, Toad 같은 전문 IDE를 사용하면 SQL 문 작성 시 실시간으로 구문 오류를 감지하고 하이라이팅해줍니다. 또한 SQL Formatter를 통해 코드를 정렬하면 쉼표 누락 위치를 시각적으로 쉽게 발견할 수 있습니다. 특히 대규모 INSERT나 CREATE TABLE 작업 시에는 반드시 IDE의 구문 검사 기능을 활성화하여 실행 전에 오류를 미리 탐지하는 습관을 들이는 것이 중요합니다.

2. 코드 리뷰 및 테스트 환경에서 사전 검증

운영 환경에 직접 SQL을 실행하기 전에 개발 또는 테스트 환경에서 반드시 먼저 검증하는 프로세스를 정착시켜야 합니다. 특히 여러 컬럼이나 값을 포함하는 복잡한 SQL의 경우, 동료 DBA나 개발자와 함께 코드 리뷰를 진행하면 단순 실수를 사전에 방지할 수 있습니다. CI/CD 파이프라인에 SQL 구문 검사 도구(예: SQLFluff)를 통합하면 자동화된 검증이 가능합니다.


관련 에러

  • ORA-00907: missing right parenthesis — 괄호 누락 에러로, ORA-00917과 함께 SQL 구문 오류 중 가장 자주 발생하는 에러입니다. 함수나 서브쿼리의 닫는 괄호를 빠뜨렸을 때 발생합니다.
  • ORA-00904: invalid identifier — 컬럼명이나 별칭이 잘못 입력되었을 때 발생하며, 쉼표 누락으로 인해 두 컬럼명이 붙어서 하나의 잘못된 식별자로 인식될 때 연쇄적으로 발생할 수 있습니다.
  • ORA-00936: missing expression — 표현식이 누락되었을 때 발생하는 에러로, 쉼표를 잘못된 위치에 추가했을 때(예: SELECT 절의 마지막 컬럼 뒤에 불필요한 쉼표) 나타납니다.
  • ORA-00913: too many values — INSERT 문에서 컬럼 수보다 값의 수가 많을 때 발생하며, 잘못된 쉼표 사용과 관련될 수 있습니다.
DBMS 에러 코드 시리즈

주요 DBMS error code를 정리하는 시리즈입니다.
블로그 홈에서 다른 에러도 확인하세요.

본 포스트는 AI가 생성한 기술 가이드입니다. 운영 환경 적용 전 충분한 검토를 권장합니다.

댓글 남기기