오라클 ORA-01400 오류 해결 가이드

Oracle 데이터베이스 작업 중 "ORA-01400: NULL을 ~ 안에 삽입할 수 없습니다"라는 오류 메시지가 나타났다면? 이 글은 이 오류의 원인과 해결 방법을 자세히 설명하며, 발생 시 빠르고 정확하게 문제를 해결할 수 있도록 돕는 것을 목표로 합니다.

오라클 DBMS

오류 발생 원인

ORA-01400 오류는 NULL 값이 허용되지 않는 컬럼에 NULL 값을 삽입하려고 할 때 발생합니다. 즉, 테이블 설계에 따라 특정 컬럼은 항상 값을 가지고 있어야 하며, 빈 값을 허용하지 않는 경우 이 오류가 발생하게 됩니다.

오류 해결 방법

다음은 ORA-01400 오류 해결을 위한 4가지 방법입니다.

3.1 삽입하려는 값 확인

가장 먼저 삽입하려는 값에 NULL 값이 포함되어 있는지 확인해야 합니다. 다음과 같은 경우 NULL 값이 포함될 수 있습니다.

  • 변수에 값이 할당되지 않은 경우
  • 데이터베이스 쿼리 결과에서 NULL 값이 반환된 경우
  • 외부 데이터 소스에서 가져온 데이터에 NULL 값이 포함된 경우

3.2 NVL 함수 사용

NULL 값 대신 다른 값을 삽입하도록 NVL 함수를 사용할 수 있습니다. NVL 함수는 첫 번째 인수가 NULL인 경우 두 번째 인수를 반환합니다. 예를 들어, 다음과 같이 사용할 수 있습니다.

INSERT INTO 테이블 (컬럼) VALUES (NVL(값, '기본값'));

예시:

-- '고객 이름' 컬럼에 NULL 값이 포함된 경우
INSERT INTO 고객 (고객_번호, 고객_이름) VALUES (100, NVL('이름 없음', '미확인'));

3.3 DEFAULT 키워드 사용

컬럼에 기본값을 설정하면 NULL 값을 삽입할 때 자동으로 기본값이 입력됩니다. 다음과 같이 DEFAULT 키워드를 사용하여 기본값을 설정할 수 있습니다.

ALTER TABLE 테이블 ALTER 컬럼 SET DEFAULT '기본값';

예시:

-- '나이' 컬럼에 기본값을 0으로 설정
ALTER TABLE 고객 ALTER 나이 SET DEFAULT 0;

3.4 NOT NULL 제약 조건 변경

NULL 값을 허용하도록 컬럼 정의를 변경할 수 있습니다. ALTER TABLE 명령을 사용하여 NOT NULL 제약 조건을 제거하면 됩니다.

주의:

  • 컬럼에 NOT NULL 제약 조건을 변경하기 전에 해당 컬럼에 NULL 값이 없는지 확인해야 합니다.
  • 컬럼에 기본값을 설정하는 경우, 기본값의 데이터 타입이 컬럼의 데이터 타입과 일치해야 합니다.

예시:

-- '전화번호' 컬럼에서 NOT NULL 제약 조건을 제거
ALTER TABLE 고객 ALTER 전화번호 MODIFY NOT NULL;

3.5 추가적인 해결 방법

  • INSERT INTO ... SELECT ... 쿼리 사용: 다른 테이블에서 데이터를 복사할 때 WHERE 절을 사용하여 NULL 값을 제외할 수 있습니다.
  • CASE WHEN 문 사용: INSERT 쿼리에 CASE WHEN 문을 사용하여 NULL 값에 따라 다른 값을 삽입할 수 있습니다.