DB/SQL - Oracle

[SQL] 숫자 데이터 타입 (1) number

생각많은 프로그래머 2024. 2. 6. 14:02

 

오라클에서 제공하는 숫자 데이터 타입은

총 4가지(number, float, binary_float, binary_double)가 있다. 

하지만 주로 number형만 사용하므로 여기서는 number형에 집중하고자 한다.

 

다른 DBMS는 integer, int와 같은 정수형, 또는 decimal과 같은 실수형을 제공하고 

오라클도 이런 타입으로 컬럼을 생성할 수 있지만 

내부적으로는 모두 number형 으로 변환되어 생성된다. 

 

컬럼을 생성할 때,  number형으로 데이터 타입을 정의하면 아래와 같이 작성할 수 있다.

컬럼명 number(p,s) 

p : 최대 유효숫자 자릿수
s : 소수점 기준 자릿수

 

위와 같이 number(p,s) 형식으로 크기를 지정할 때,

 

여기서 p는 precision, 정밀도를 의미한다. 

소수점 기준 모든 유효숫자 자릿수를 말하며

만약  p에 명시한 것보다 큰 숫자값을 입력하면 오류가 발생한다.

 

s는 scale, 소수점 기준 자릿수를 의미한다.

s가 양수면 소수점 이하, 음수면 소수점 이상(소수점 기준 왼쪽) 유효숫자 자릿수를 나타낸다.

s에 명시한 숫자 이상의 숫자를 입력하면, s에 명시한 숫자로 반올림 처리한다.

s가 음수면 소수점 기준 왼쪽 자릿수만큼 반올림한다.

s가 p보다 크면 p는 소수점 이하 유효숫자 자릿수를 의미한다.

 

* 참고로 괄호 안에 p,s 대신 *을 입력하면 

p의 디폴트 값인 38이 적용되어 최대 크기인 22byte를 저장할 수 있게 된다.

 

* 만약 s를 입력하지 않고 number(p)만 입력한다면

s는 자동으로 0으로 인식한다.

 

 

 

각각의 특징은 예시를 통해 명확히 이해할 수 있다.

 

예를 들어, 숫자 값으로 123.54 와 125.54를 insert 한다고 했을 때

타입과 크기 지정에 따라 각각 다른 값이 저장된다. 

또한 조건에 맞지 않을 경우에는 오류가 발생하기도 한다.

숫자 값 타입 결과 설명
123.54
number 123.54 정상
number(3) 124 s는 명시하지 않아 0으로 인식, p가 3이므로 소수점 첫 자리(5)에서 반올림
number(3,2) 오류 p가 3인데 입력값인 123.54는 유효숫자가 총 5자리여서 오류 발생. 유효숫자(5)가 p(3)보다 크면 오류가 발생함
number(5,2) 123.54 정상, 유효숫자 5에 소수점 2자리까지 저장됨
number(7,1) 123.5 s가 1이므로 .54에서 소수점 둘째 자리인 4가 반올림처리 기준에 의해 삭제되어 .5만 남음
number(7,-1) 120 s가 -1이어서 소수점 왼쪽 첫 자리 3이 반올림처리 기준에 의해 0으로 처리됨
125.54 number(7,-1) 130 s가 -1이어서 소수점 왼쪽 첫 자리 5가 반올림되어 십단위가 2에서 3으로 바뀜

 

 

그렇다면 숫자 값이 2자리 보다 훨씬 더 큰 소수점 자리를 가지고 있다면 어떻게 될까? 

숫자 값 타입 결과 설명
0.1234 number(4,5) 오류 유효숫자는 4개가 맞지만 s가 5인데 네 자리수이므로 오류 발생
0.01234 number(4,5) 0.01234 소수점 이하 다섯번째 자리까지 유효숫자 4개이므로 정상
0.0001234 number(4,7) 0.0001234 소수점 이하 일곱번째 자리까지 유효숫자 4개이므로 정상
0.0001234 number(3,7) 오류 소수점 이하 일곱번째 짜리까지 유효숫자는 1234로 4개인데 p가 3이므로 오류 발생
0.0000123 number(3,7) 0.0000123 소수점 이하 일곱번째 자리까지 유효숫자는 123으로 3개이고 p가 3이므로 정상
0.00001234 number(3,7) 0.0000123 소수점 이하 일곱번째 자리까지 유효숫자는 123이므로 4는 제외됨
0.00001235 number(3,7) 0.0000124 소수점 이하 일곱번째 자리까지 유효숫자는 123이므로 5가 반올림됨

 

 

 

 

 

참고문헌 : [오라클 SQL과 PL/SQL을 다루는 기술], 길벗 출판사, 홍형경 지음