728x90
Oracle SQL에서 가장 많이 사용되는 숫자 데이터 타입은 바로 NUMBER입니다.
이번 글에서는 NUMBER(p, s)의 구조와 실무에서 자주 겪는 오류까지 정리해보겠습니다.
🔢 1. NUMBER 타입이란?
Oracle에서 숫자 데이터를 저장할 때 가장 기본이 되는 타입이 NUMBER입니다.
NUMBER(p, s)
- p (precision, 정밀도): 숫자의 전체 자릿수 (정수부 + 소수부 포함)
- s (scale, 소수 자릿수): 소수점 이하 자릿수
예를 들어,
NUMBER(5, 2)
- 최대 5자리까지 저장 가능
- 소수점 아래는 2자리까지 허용
- 입력 가능한 범위: -999.99 ~ 999.99
- 1000.00을 입력하면 ORA-01438 오류 발생
🧮 2. 다양한 예시로 이해하기
정의 | 허용값 예시 | 허용 여부 | 설명 |
NUMBER(6, 0) | 123456 | ✅ | 정수 6자리 |
NUMBER(6, 0) | 1234567 | ❌ | 7자리로 초과 |
NUMBER(6, 2) | 1234.56 | ✅ | 정수 4자리 + 소수 2자리 |
NUMBER(6, 2) | 12345.67 | ❌ | 정수 5자리로 초과 |
NUMBER(5, -2) | 12000 | ✅ | 소수 자릿수 음수 → 반올림 기준 |
NUMBER | 제한 없음 | ✅ | 정밀도, 소수 제한 없음 (가변형) |
⚠️ 3. 실무에서 자주 겪는 오류
❗ ORA-01438: 이 열에 대해 지정된 전체 자릿수보다 큰 값이 허용됩니다
이 오류는 주로 아래와 같은 경우 발생합니다:
컬럼 정의: NUMBER(6, 0)
입력값: 1000000 → ❌ (7자리)
또는
컬럼 정의: NUMBER(10, 0)
입력값: 123.45 → ❌ (소수 허용 안 됨)
✅ 해결 방법
- 컬럼 정의 변경: ALTER TABLE ... MODIFY로 정밀도 확장
- 값 검증: 입력 전에 자릿수 체크 또는 TRUNC, ROUND 사용
🔍 4. 숫자 타입 관련 팁
- NUMBER만 쓰면 거의 모든 숫자를 저장할 수 있지만, 성능 및 저장 효율을 고려해 NUMBER(p,s)를 정의하는 것이 좋음
- 소수 자릿수를 사용하는 컬럼은 계산 시 주의 필요 (ROUND, TRUNC 등과 함께 사용)
- PL/SQL에서 숫자 변수도 동일한 방식으로 정의 가능
✅ 마무리
Oracle의 NUMBER 타입은 단순한 숫자 저장을 넘어, 정밀한 계산과 데이터 무결성을 책임지는 중요한 요소입니다.
정의 방식에 따라 데이터가 저장되지 않거나, 예기치 못한 오류가 발생할 수 있기 때문에 NUMBER(p, s)의 의미를 정확히 이해하고 사용하는 것이 매우 중요합니다.
특히 ORA-01438 오류처럼 사소한 실수로도 시스템에 영향을 줄 수 있으니, 정의된 자릿수보다 큰 값을 입력하지 않도록 항상 주의하세요!
728x90
'BackEnd > DB(SQL)' 카테고리의 다른 글
[Oracle 오류 해결] ORA-01438: 지정된 전체 자릿수보다 큰 값이 허용됩니다 (0) | 2025.05.31 |
---|---|
[Oracle] 테이블 컬럼명, 데이터 타입, 길이 변경하는 방법 정리 (1) | 2025.05.30 |
[Oracle] ORA-01438 오류 해결 – 숫자 컬럼 크기 초과 문제 잡기 (0) | 2025.05.22 |
[Oracle] PL/SQL 로그 사용하기 – DBMS_OUTPUT.PUT_LINE() 완전 정복 (3) | 2025.05.21 |
[Oracle] 오라클 TO_DATE 함수 – 문자열을 날짜로 정확하게 변환하는 방법 (0) | 2025.05.20 |