ORA-01400: NULL을 (USER_NAME.TABLE_NAME.COLUMN_NAME) 안에 삽입할 수 없습니다 해결하기 (ORA-01400: cannot insert null into)

ORA-01400: NULL을 (USER_NAME.TABLE_NAME.COLUMN_NAME) 안에 삽입할 수 없습니다 오류가 발생하는 원인, 그리고 해결 방법에 대해 안내해드리겠습니다.

이번 게시물에서는 ORA-01400 오류가 발생하는 원인을 다음과 같이 2가지로 구분하여 살펴보도록 하겠습니다.

  • NOT NULL 컬럼에 NULL을 인서트 하려는 경우
  • 응용 프로그램 개발 도구 등에서 주석과 함께 바인딩 변수를 사용하는 오류

NOT NULL 컬럼에 NULL을 인서트 하려는 경우

오라클에서 컬럼을 생성할 때 NOT NULL과 같은 체크 제약조건을 추가하는 경우, 또는 기본 키(primary key)를 지정하는 경우 등은 해당 컬럼에 NULL을 인서트 할 수가 없습니다. 다음은 이러한 NOT NULL 컬럼에 대해 NULL 인서트 시도로 인하여 ORA-01400 오류가 발생하는 예제 자료입니다.

CREATE TABLE table_name (column_name NUMBER NOT NULL); 

=>

SQL> INSERT INTO table_name VALUES (null);
INSERT INTO table_name VALUES (null)
                               *
1행에 오류:
ORA-01400: NULL을 ("USER_NAME"."TABLE_NAME"."COLUMN_NAME") 안에 삽입할 수
없습니다

응용 프로그램 개발 도구 등에서 주석과 함께 바인딩 변수를 사용하는 오류

ORA-01400: NULL을 (USER_NAME.TABLE_NAME.COLUMN_NAME) 안에 삽입할 수 없습니다

주석 처리 등과 함께 인서트를 시도하려는 경우에 바인딩 변수를 NULL로 인식하는 버그 같은 경우도 있습니다. :PARAM에 'VALUE'를 입력하였으나 NULL로 인식이 되어 오류가 발생하는 예제입니다. 아마 전체 스크립트 실행으로 인식이 되며 바인딩 관련 부분이 제대로 작동하지 않는 듯합니다. 이렇게 특이한 버그도 있습니다.😅

--value
INSERT INTO table_name (column_name) VALUES (:param);

=>

INSERT INTO table_name (column_name) VALUES (:param)
Error at line 2
ORA-01400: NULL을 ("USER_NAME"."TABLE_NAME"."COLUMN_NAME") 안에 삽입할 수 없습니다

댓글