본문 바로가기

SQL & 데이터베이스/SQL 기본 문법 & 오류

[SQL] ORA-01400: Cannot Insert NULL 오류 해결 방법

📌 [SQL] ORA-01400: Cannot Insert NULL 오류 해결 방법

📌 ORA-01400 오류란?

ORA-01400: cannot insert NULL 오류는 **NULL 값을 허용하지 않는 열에 NULL 값을 삽입하려 할 때 발생하는 오류**입니다.
즉, **NOT NULL 제약 조건이 설정된 컬럼에 NULL 값이 삽입되려 하면** 발생합니다.


📌 ORA-01400 오류가 발생하는 주요 원인과 해결 방법

1️⃣ NOT NULL 제약 조건이 설정된 컬럼에 NULL 값 삽입

설명: 테이블의 특정 컬럼이 NOT NULL 제약 조건을 가지고 있는데, 이 컬럼에 NULL 값을 삽입하려 하면 오류가 발생합니다.

오류 발생 예제:


CREATE TABLE employees (
    id NUMBER PRIMARY KEY,
    name VARCHAR2(50) NOT NULL,
    department VARCHAR2(50)
);

INSERT INTO employees (id, department) VALUES (1, 'IT');
-- ORA-01400 오류 발생 (name 컬럼이 NULL이므로 삽입 불가능)

해결 방법: NULL 값을 허용할 수 없다면, 값을 명확히 지정해야 합니다.


INSERT INTO employees (id, name, department) VALUES (1, 'John Doe', 'IT');
-- 정상 실행됨

2️⃣ INSERT 문에서 NOT NULL 컬럼을 누락

설명: INSERT 문에서 NOT NULL이 설정된 컬럼을 포함하지 않으면 오류가 발생할 수 있습니다.

오류 발생 예제:


INSERT INTO employees (id, department) VALUES (2, 'HR');
-- name 컬럼이 NULL이므로 오류 발생

해결 방법: NOT NULL 컬럼을 반드시 포함하거나, 기본값을 설정해야 합니다.


ALTER TABLE employees MODIFY name DEFAULT 'Unknown';
INSERT INTO employees (id, department) VALUES (2, 'HR');
-- name 컬럼이 'Unknown'으로 자동 삽입됨

3️⃣ NULL 값을 포함한 서브쿼리 사용

설명: 서브쿼리를 사용하여 데이터를 삽입할 때, NULL 값이 반환될 경우 오류가 발생할 수 있습니다.

오류 발생 예제:


INSERT INTO employees (id, name, department)
SELECT 3, NULL, 'Finance' FROM dual;
-- name 컬럼이 NULL이므로 오류 발생

해결 방법: NULL 값을 기본값으로 대체하는 NVL() 또는 COALESCE() 함수를 사용해야 합니다.


INSERT INTO employees (id, name, department)
SELECT 3, NVL(NULL, 'Default Name'), 'Finance' FROM dual;
-- 정상 실행됨

4️⃣ 트리거(Trigger)에서 NULL 값이 삽입될 때

설명: 트리거를 사용할 때, 특정 컬럼이 NULL로 삽입되면 오류가 발생할 수 있습니다.

오류 발생 예제:


CREATE OR REPLACE TRIGGER check_employee_name
BEFORE INSERT ON employees
FOR EACH ROW
BEGIN
    :NEW.name := NULL;
END;
/
INSERT INTO employees (id, name, department) VALUES (4, 'Alice', 'Sales');
-- 트리거가 name을 NULL로 설정하여 오류 발생

해결 방법: 트리거 내에서 NULL을 허용하지 않도록 조건을 추가해야 합니다.


CREATE OR REPLACE TRIGGER check_employee_name
BEFORE INSERT ON employees
FOR EACH ROW
BEGIN
    IF :NEW.name IS NULL THEN
        :NEW.name := 'Default Name';
    END IF;
END;
/

📌 ORA-01400 오류 예방법 요약

  • ✅ NOT NULL이 설정된 컬럼에 NULL 값이 삽입되지 않도록 주의
  • ✅ INSERT 문에서 NOT NULL 컬럼을 항상 포함
  • ✅ 서브쿼리에서 NULL 값이 반환되지 않도록 NVL() 또는 COALESCE() 사용
  • ✅ 트리거 내에서 NULL 값 처리를 명확히 설정

🔍 결론

ORA-01400 오류는 NOT NULL 컬럼에 NULL 값이 삽입될 때 발생하는 오류입니다.
올바른 데이터 삽입 및 NULL 값 처리를 통해 오류를 방지할 수 있습니다! 🚀


📌 더 많은 정보가 궁금하다면?

📌 https://jins-pp.tistory.com/