ORA-01438 : value larger than specified precision allowed for this column

ERROR CODE / 설명

소수점 데이터 타입 컬럼에 자리수를 초과하는 데이터를 넣을려는 경우 발생하는 에러 

ORA-01438: value larger than specified precision allowed for this column

 

발생 원인

 컬럼 COL2 는 NUMBER(7, 2)로 정수 5자리, 소수점 이하 2자리로 구성되어 있다.  정수 6자리를 저장하다가 에러 발생함

-- [1] TEST 테이블 생성
CREATE TABLE IMSI_TABLE ( col1 number(3) , col2 number(7,2) );

-- [2] TEST 테이블 INSERT 시도
declare
    i integer;
begin 
    INSERT INTO imsi_table ( col1, col2 ) 
    VALUES 
    (
       '1',
      100000
    ); 
end;

 

해결방법

컬럼의 데이터 타입을 변경한다. ( 단, 대용량 테이블인 경우 컬럼 변경 작업 시간이 장시간 소요되고 그 동안 테이블에 LOCK까지 설정되므로 TRANSCATION이 없는 시간대에 작업을 하는 것이 좋다 )

ALTER TABLE IMSI_TABLE MODIFY col2 number(8,2);

 

정상확인

위 발생 원인 [2] SCRIPT를 재시도하면 데이터가 정상적으로 저장됨