📌 [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 값 처리를 통해 오류를 방지할 수 있습니다! 🚀
📌 더 많은 정보가 궁금하다면?
'SQL & 데이터베이스 > SQL 기본 문법 & 오류' 카테고리의 다른 글
[SQL] VIEW(뷰) 개념과 활용 방법 - 성능 최적화 및 관리 팁 (0) | 2025.03.13 |
---|---|
[SQL] 서브쿼리(Subquery) 개념 및 활용 방법 (3) | 2025.03.12 |
[SQL] INNER JOIN vs OUTER JOIN 차이 및 활용법 (0) | 2025.03.12 |
[SQL] GROUP BY와 HAVING 절 차이 및 활용법 (0) | 2025.03.12 |
[SQL] ORA-00904: Invalid Identifier 오류 해결 방법 (0) | 2025.03.10 |