데이터/Oracle
오라클 숫자(NUMBER) 타입의 소수점
RareOne
2018. 2. 8. 13:51
길게 쓰자면 한없이 길 수 있는 주제다.
숫자타입 컬럼의 데이터를
INSERT
SELECT 하다 보면
소스 데이터의 숫자의 합과
타겟 데이터의 숫자의 합이 다를 수 있다.
왜?
소스 컬럼 타입이 NUMBER 이고
타겟 컬럼 타입이 NUMBER(22) 일 때
NUMBER 는 소수점을 포함하고
NUMBER(22)는 소수점을 포함하지 않는 정수형 타입이므로
INSERT 하면서 반올림 해버린다.
테스트해본 내용은 이렇다.
CREATE TABLE HWON
(
BASIC_USE_QT NUMBER(22),
BASIC_USE_QT2 NUMBER
)
NOLOGGING;
INSERT INTO HWON
SELECT ODQT, ODQT
FROM TABLE
WHERE MOD(ODQT, 1) <> 0 -- 소수점 자리 값이 있는것만
SELECT *
FROM HWON
이렇게 해보면 결과는
BASIC_USE_QT BASIC_USE_QT2
1 0.5
1 0.5
1 0.5
2 1.5
1 0.5
1 0.5
1 0.5
1 0.5
1 0.5
이렇게 강제로 반올림 되어버린다.
그러니 모르고 있으면... 값이 잘못 들어갈 수 있다.
select COLUMN_NAME, DATA_LENGTH, DATA_PRECISION, DATA_SCALE
from all_tab_columns where table_name = 테이블명
해보면 DATA_SCALE 이 소수점 자리수를 의미한다. 0이면... 정수다.
자세한 내용은
이 분 블로그 내용을 참고해보시라. 상당히 자세히 연구하신듯.