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

ORA-01400
2026년 07월 10일 | DBMS Error 가이드

이 글에서 다루는 내용

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

ORA-01400 cannot insert NULL into column 는?

ORA-01400 에러는 Oracle 데이터베이스에서 NOT NULL 제약 조건이 설정된 컬럼에 NULL 값을 삽입하려고 할 때 발생하는 오류입니다. 즉, 해당 컬럼은 반드시 유효한 값이 존재해야 하는데, INSERT 또는 UPDATE 구문에서 값을 누락하거나 명시적으로 NULL을 지정했을 때 Oracle 엔진이 이를 거부하며 발생합니다. 이 에러는 데이터 무결성을 보호하기 위한 Oracle의 핵심 제약 메커니즘 중 하나로, 애플리케이션 개발 초기부터 운영 단계까지 매우 빈번하게 마주치는 오류입니다.


주요 발생 원인

1. INSERT 구문에서 NOT NULL 컬럼 값 누락

가장 흔한 원인으로, INSERT 문 작성 시 컬럼 목록을 명시하지 않거나 특정 컬럼의 값을 빠뜨린 경우입니다. 테이블 스키마가 변경되어 새로운 NOT NULL 컬럼이 추가되었는데, 기존 INSERT 구문이 그대로 유지될 때 특히 자주 발생합니다. 운영 환경에서 스키마 변경 후 애플리케이션 코드를 업데이트하지 않은 경우에 치명적인 장애로 이어질 수 있습니다.

2. 애플리케이션에서 명시적으로 NULL을 바인딩하는 경우

Java, Python, .NET 등의 애플리케이션에서 PreparedStatement나 바인드 변수를 사용할 때, 변수에 NULL이 바인딩된 채로 쿼리가 실행되는 경우입니다. 특히 사용자 입력값을 그대로 전달할 때 유효성 검사(Validation)가 부재하면 이 문제가 발생합니다. 이는 애플리케이션 로직과 데이터베이스 제약 간의 불일치에서 비롯됩니다.

3. DEFAULT 값 미설정 및 시퀀스/트리거 미작동

PK 컬럼이나 필수 컬럼에 DEFAULT 값 또는 시퀀스(SEQUENCE)를 사용해야 하는데, 설정이 누락된 경우입니다. 예를 들어, 기본 키(Primary Key)에 시퀀스 값을 자동으로 부여하는 트리거가 존재해야 하는데, 해당 트리거가 비활성화되어 있거나 다른 세션에서 DDL 변경으로 인해 무효화된 경우에 발생합니다. Oracle 12c 이상에서는 IDENTITY 컬럼을 활용하면 이 문제를 근본적으로 예방할 수 있습니다.


해결 방법

원인 1 해결: 누락된 컬럼 값 확인 및 INSERT 구문 수정

먼저 어떤 컬럼이 NOT NULL인지 확인합니다.

-- 테이블의 NOT NULL 컬럼 목록 확인
SELECT column_name, nullable, data_type, data_default
FROM   user_tab_columns
WHERE  table_name = 'EMPLOYEES'
ORDER BY column_id;

확인 후, 누락된 컬럼 값을 포함하여 INSERT 구문을 수정합니다.

-- 잘못된 예시 (DEPARTMENT_ID가 NOT NULL인데 누락)
INSERT INTO employees (employee_id, last_name, email, hire_date, job_id)
VALUES (300, 'Kim', 'kim@example.com', SYSDATE, 'IT_PROG');

-- 올바른 예시 (누락된 컬럼 값 추가)
INSERT INTO employees (employee_id, last_name, email, hire_date, job_id, department_id)
VALUES (300, 'Kim', 'kim@example.com', SYSDATE, 'IT_PROG', 60);

원인 2 해결: NULL 값 치환 및 유효성 검사 적용

NVL 또는 COALESCE 함수를 사용하여 NULL 값을 기본값으로 치환합니다.

-- NVL을 사용하여 NULL을 기본값으로 치환
INSERT INTO orders (order_id, customer_id, status, order_date)
VALUES (
    seq_order_id.NEXTVAL,
    101,
    NVL(:p_status, 'PENDING'),   -- NULL이면 'PENDING'으로 대체
    NVL(:p_order_date, SYSDATE)  -- NULL이면 현재 날짜로 대체
);

-- COALESCE를 활용한 다중 대체값 처리
INSERT INTO products (product_id, product_name, description)
VALUES (
    seq_product_id.NEXTVAL,
    :p_name,
    COALESCE(:p_desc, :p_alt_desc, 'No Description Available')
);

원인 3 해결: DEFAULT 값 설정 및 IDENTITY 컬럼 활용

-- DEFAULT 값 추가 (ALTER TABLE)
ALTER TABLE employees
MODIFY (status VARCHAR2(10) DEFAULT 'ACTIVE' NOT NULL);

-- Oracle 12c 이상: IDENTITY 컬럼으로 PK 자동 생성
CREATE TABLE departments (
    dept_id    NUMBER GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
    dept_name  VARCHAR2(100) NOT NULL,
    location   VARCHAR2(200) DEFAULT 'Seoul' NOT NULL,
    created_at DATE          DEFAULT SYSDATE NOT NULL
);

-- 트리거 활성화 상태 확인
SELECT trigger_name, status
FROM   user_triggers
WHERE  table_name = 'EMPLOYEES';

-- 비활성화된 트리거 재활성화
ALTER TRIGGER trg_emp_id ENABLE;

에러 발생 시 즉각 진단 쿼리

-- 에러 발생 테이블의 제약 조건 전체 확인
SELECT c.constraint_name,
       c.constraint_type,
       cc.column_name,
       c.status
FROM   user_constraints  c
JOIN   user_cons_columns cc ON c.constraint_name = cc.constraint_name
WHERE  c.table_name = 'YOUR_TABLE_NAME'
  AND  c.constraint_type IN ('C', 'P')
ORDER BY cc.position;

예방 방법

1. 테이블 설계 단계에서 DEFAULT 값과 NOT NULL 제약 명확히 정의

테이블을 처음 설계할 때부터 각 컬럼의 NULL 허용 여부를 명확히 정의하고, 가능한 경우 DEFAULT 값을 함께 설정하는 습관을 들여야 합니다. 특히 생성일시(CREATED_AT), 상태(STATUS), 등록자(CREATED_BY)와 같이 항상 값이 존재해야 하는 감사(Audit) 컬럼은 반드시 DEFAULT와 NOT NULL을 함께 적용하세요. 이렇게 하면 INSERT 구문에서 해당 컬럼을 생략하더라도 자동으로 기본값이 채워져 ORA-01400 에러를 원천 차단할 수 있습니다.

2. 스키마 변경 시 영향받는 애플리케이션 코드 즉시 점검 및 회귀 테스트 시행

운영 중인 데이터베이스에 새로운 NOT NULL 컬럼을 추가할 때는 반드시 DEFAULT 값을 함께 지정하여 기존 INSERT 구문이 영향받지 않도록 해야 합니다. 또한 스키마 변경 후에는 관련 애플리케이션 모듈에 대해 회귀 테스트(Regression Test)를 반드시 수행하고, CI/CD 파이프라인에 DB 제약 조건 위반을 감지하는 자동화 테스트를 포함시키는 것을 강력히 권장합니다.


관련 에러

  • ORA-01407: UPDATE 구문에서 NOT NULL 컬럼을 NULL로 변경하려 할 때 발생하는 에러로, ORA-01400과 쌍을 이루는 오류입니다.
  • ORA-02290: CHECK 제약 조건 위반 에러로, NOT NULL 이외의 데이터 무결성 규칙을 어겼을 때 발생합니다.
  • ORA-00001: UNIQUE 또는 PRIMARY KEY 제약 조건 위반 에러로, 중복 값 삽입 시 발생하며 제약 조건 관련 에러 중 가장 빈번하게 동반 발생합니다.
  • ORA-02291: 외래 키(Foreign Key) 제약 조건 위반으로, 참조 무결성 오류를 나타냅니다.

DBMS 에러 코드 시리즈

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

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

댓글 남기기