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값 이상의 값을 넣으면 자동으로 반올림?이 되는데
그 이유가 궁금하고 그 이상의 데이터를 저장할 수 있는 방법은 없는 것 인지 궁금합니다!
자바의 LONG타입의 데이터 저장범위가 "–2,147,483,648 ~ 2,147,483,647"가 오라클 NUMBER 타입보다 작은 것으로 조회되네요.
출처: http://sime.tistory.com/65 [심이 블로그]
자바의 DOUBLE (1.7E+/-308(15개의 자릿수))을 쓰거나, 더 큰 숫자를 입력하려면 문자열로 저장하세요.