Number Type 데이터 범위 관련하여 질문드립니다. 0 3 7,898

by 싱싱슈퍼 [Oracle 기초] oracle number [2018.06.28 10:42:12]


Number타입의 저장 크기와 관련하여 궁금증이 있어 아래와 같이 테스트를 진행하였는데

궁금한점이 생겨서 질문드립니다~!

 

[오라클 버전]

Oracle 10g

Oracle 11g XE

 

[Table 구조]

COL1 : VARCHAR2(100)

COL2 : NUMBER(22)

COL3 : NUMBER(38)

 

[테스트 방법]

테스트는 JDBC와 sql developer를 이용하여 INSERT 하였습니다.

JDBC를 사용한 경우 Long 값 이상은 setString과 setDouble로 변수를 주었습니다.

 

[테스트 결과]

COL1 (소스 데이터) COL2 COL3  -
9223372036854775807 9223372036854775807 9223372036854775807  
9223372036854775808 9223372036854776000 9223372036854776000  
12345678901234567890123456789012345678 - 12345678901234568000000000000000000000  
1234567890123456789012 1234567890123456800000 -  

 

위와 같이 NUMBER(22)와 NUMBER(38)로 되어있는 컬럼이

저는 각 22자리와 38자리의 정수까지 지원이 되는 줄 알고 있었는데

자바의 Long값 이상의 값을 넣으면 자동으로 반올림?이 되는데

그 이유가 궁금하고 그 이상의 데이터를 저장할 수 있는 방법은 없는 것 인지 궁금합니다!

 

by 신이만든지기 [2018.06.28 15:13:32]

자바의 LONG타입의 데이터 저장범위가 "–2,147,483,648 ~ 2,147,483,647"가 오라클 NUMBER 타입보다 작은 것으로 조회되네요.

출처: http://sime.tistory.com/65 [심이 블로그]

자바의 DOUBLE (1.7E+/-308(15개의 자릿수))을 쓰거나, 더 큰 숫자를 입력하려면 문자열로 저장하세요.


by 싱싱슈퍼 [2018.07.03 09:33:13]

답변 감사드립니다!

저도 그래서 테스트 시 setString과 setDouble을 이용하여 테스트 하였는데도

Long값 이상은 위와 같이 깨져서 들어가네요 ㅠㅠ


by 마농 [2018.07.03 10:30:35]

오라클 문제가 아닌 듯 합니다. 자바 문제인듯.
오라클로 넘어가기 전 이미 자바에서 잘렸을 것 같네요.

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입