BackEnd/DB(SQL)
[Oracle] ORA-01438 오류 해결 – 숫자 컬럼 크기 초과 문제 잡기
bobo12
2025. 5. 22. 12:07
728x90
🔍 에러 설명
❗ ORA-01438 오류 메시지
ORA-01438: 이 열에 대해 지정된 전체 자릿수보다 큰 값이 허용됩니다.
✅ 요약 원인
해당 오류는 NUMBER(p, s) 타입의 컬럼에 대해 "p(전체 자릿수)"보다 큰 숫자를 넣으려고 할 때 발생합니다.
Oracle은 입력값이 지정된 범위를 초과할 경우 에러를 발생시킵니다.
🔢 예시로 이해하기
🔸 테이블 생성 예
CREATE TABLE EMP_SALARY (
EMP_ID NUMBER,
SALARY NUMBER(5,2) -- 전체 자릿수 5자리, 소수점 2자리
);
- 이 경우 최대 입력값은 999.99
- 예를 들어 1000.00, 12345.67 등을 넣으면 오류 발생
🔸 에러 발생 예
INSERT INTO EMP_SALARY VALUES (1, 12345.67);
-- ORA-01438 발생!
🔧 해결 방법
1️⃣ 컬럼의 자릿수 늘리기
-- ALTER TABLE로 컬럼 자릿수 변경
ALTER TABLE EMP_SALARY MODIFY SALARY NUMBER(7,2);
- 위처럼 NUMBER(7,2)로 변경하면 최대 99999.99까지 허용됩니다.
2️⃣ 입력값을 조정하기 (변환 또는 절삭)
-- 자릿수 초과 전 데이터 가공
INSERT INTO EMP_SALARY VALUES (2, TRUNC(12345.678, 2)); -- 12345.67
- 혹은 소수점 이하 잘라내기, 정수화하기 등
🔎 실무 팁
- NUMBER(5,2)는 정수부 3자리 + 소수부 2자리라는 의미입니다.
5는 전체 자릿수(p), 2는 소수점 이하 자릿수(s) - 실무에서 단위가 큰 금액 또는 자동 계산된 값을 저장할 때 주의
- 정수만 저장할 거면 NUMBER(5)처럼 소수부 생략하는 것이 안전
💬 마무리 문구 예시
ORA-01438 오류는 간단하지만 실무에서 자주 마주치는 문제입니다.
데이터의 자릿수와 컬럼 정의가 일치하는지 항상 확인하고, 과도한 자릿수 제한보다는 유연한 설계를 통해 오류를 방지하세요!
728x90