오라클 데이터베이스의 테이블에 새로운 데이터를 INSERT나 기존 데이터를 UPDATE를 할 때 ORA-01438 오류가 발생할 때가 있습니다.
오류 메시지는 아래와 같습니다.
ORA-01438: 이 열에 대해 지정된 전체 자릿수보다 큰 값이 허용됩니다.
ORA-01438: value larger than specified precision allowed for this column
오라클 ORA-01438: value larger than specified precision allowed for this column 오류 발생 원인과 해결 방법에 대해 알아보겠습니다.
오라클 ORA-01438 예외 오류가 발생하는 이유
ORA-01438는 오류 설명에서 알 수 있듯이 오라클 테이블의 컬럼(열) 전체 자릿수보다 큰 값을 입력하려고 할 때 해당 오류가 발생하게 됩니다.
아래 화면처럼 Table 정의를 보면 문자나 숫자 타입의 Column은 특정할 길이의 최대 입력 자릿수가 정의되어 있습니다.
이렇게 정의된 컬럼 길이를 초과하는 값을 해당 컬럼(열)에 입력하려고 할 때 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);
※ 두가지 방법이 있지만 최선의 방법은 첫번쨰로 소개한 테이블 정의의 컬럼 자릿수를 늘려주는 방법입니다.
※ 함께 읽으면 도움이 될 만한 다른 포스팅 글입니다.
이 글이 도움이 되었기를 바랍니다. ^-^