ORA-01438: value larger than specified precision allowed for this column
Oracle의미
NUMBER 컬럼에 정의된 precision과 scale 한도를 초과하는 숫자가 기록되었다. 예를 들어 정수부가 3자리인 값은 NUMBER(4,2) 컬럼에 들어가지 않는다.
원인
컬럼의 NUMBER(p,s) 정의가 데이터에 비해 너무 좁음. 계산 결과가 예상보다 큼. 소수부 scale이 정수부에 남는 자릿수를 줄임(NUMBER(5,3)은 정수 2자리만 허용).
해결 방법
실제 데이터 범위에 맞게 컬럼 용량을 넓힌다: ALTER TABLE my_table MODIFY (my_column NUMBER(12,2)); 애플리케이션에서 값을 반올림하거나 ROUND/TRUNC로 scale에 맞춘다. 넘치는 행을 찾으려면 테스트하면서 쿼리 범위를 좁히고, 입력 검증을 추가한다.
같은 데이터베이스의 다른 항목
- gc buffer busy대기(RAC): 인스턴스 간 전송 중인 cache fusion 블록에 대한 경합
- library cache lock대기: library cache 객체 핸들 경합(parse/DDL 직렬화)
- ORA-00604error occurred at recursive SQL level
- ORA-01400cannot insert NULL into (column)
- ORA-02291integrity constraint violated - parent key not found
- ORA-02292integrity constraint violated - child record found
- ORA-00979not a GROUP BY expression