오라클 ORA-01438 오류 발생 원인과 해결 방법


오라클 데이터베이스의 테이블에 새로운 데이터를 INSERT나 기존 데이터를 UPDATE를 할 때 ORA-01438 오류가 발생할 때가 있습니다.

오류 메시지는 아래와 같습니다.

ORA-01438: 이 열에 대해 지정된 전체 자릿수보다 큰 값이 허용됩니다.
ORA-01438: value larger than specified precision allowed for this column

오라클 ORA-01438 오류 발생 원인과 해결 방법

오라클 ORA-01438: value larger than specified precision allowed for this column 오류 발생 원인과 해결 방법에 대해 알아보겠습니다.

오라클 ORA-01438 예외 오류가 발생하는 이유

ORA-01438는 오류 설명에서 알 수 있듯이 오라클 테이블의 컬럼(열) 전체 자릿수보다 큰 값을 입력하려고 할 때 해당 오류가 발생하게 됩니다.

아래 화면처럼 Table 정의를 보면 문자나 숫자 타입의 Column은 특정할 길이의 최대 입력 자릿수가 정의되어 있습니다. 

오라클 ORA-01438 예외 오류가 발생하는 이유

이렇게 정의된 컬럼 길이를 초과하는 값을 해당 컬럼(열)에 입력하려고 할 때 ORA-01438 오류가 발생하게 됩니다.

오라클 ORA-01438 예외 오류를 해결하는 방법

1. 첫번째 방법은 테이블 컬럼의 길이를 늘려주는 방법입니다.

오라클의 table1이라는 테이블의 column1이라는 컬럼의 자릿수가 3자리로 잡혀있을 때 1000이라는 값을 입력하면 오류가 생깁니다. 

이를 경우 column1 컬럼의 자릿수를 4자리로 늘려주면 됩니다. (단, 자릿수를 줄이는 것은 극히 위험합니다. 컬럼의 데이터가 강제로 잘리게 됩니다.)

ALTER TABLE table MODIFY (column1 NUMBER(4,0));


2. 두 번째 방법은 입력하는 데이터의 길이를 컬럼의 길이 이하로 줄여서 입력하는 방법입니다.
물리적인 테이블 정의를 변경할 수 없을 때 사용할 수 있는 방법입니다.

사실 이 방법은 데이터의 뒷 부분이 잘려도 크게 상관없는 그다지 중요하지 않은 컬럼에 대해 입력하는 문자열 데이터를 컬럼의 자릿수에 맞게 잘라서 저장할 때 사용할 수 있는 방법입니다. 자리수를 맞춘다고 숫자를 잘라서 입력하면 안됩니다. 숫자를 임의로 자르면 데이터로서의 의미가 없어지게 됩니다.

string str = column_data.Substring(0, 3);

※ 두가지 방법이 있지만 최선의 방법은 첫번쨰로 소개한 테이블 정의의 컬럼 자릿수를 늘려주는 방법입니다.





이 글이 도움이 되었기를 바랍니다. ^-^


답글 남기기