길게 쓰자면 한없이 길 수 있는 주제다. 


숫자타입 컬럼의 데이터를 

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이면... 정수다. 




자세한 내용은 

https://m.blog.naver.com/PostView.nhn?blogId=hanccii&logNo=220733159291&proxyReferer=https%3A%2F%2Fwww.google.co.kr%2F

이 분 블로그 내용을 참고해보시라. 상당히 자세히 연구하신듯.



+ Recent posts