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