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
'BackEnd > DB(SQL)' 카테고리의 다른 글
[Oracle 오류 해결] ORA-01438: 지정된 전체 자릿수보다 큰 값이 허용됩니다 (0) | 2025.05.31 |
---|---|
[Oracle] 테이블 컬럼명, 데이터 타입, 길이 변경하는 방법 정리 (1) | 2025.05.30 |
[Oracle] PL/SQL 로그 사용하기 – DBMS_OUTPUT.PUT_LINE() 완전 정복 (3) | 2025.05.21 |
[Oracle] 오라클 TO_DATE 함수 – 문자열을 날짜로 정확하게 변환하는 방법 (0) | 2025.05.20 |
ORA-01843: 지정한 월이 부적합합니다 – 날짜 포맷 불일치 해결법 총정리 (2) | 2025.05.19 |