Oracle에서 숫자에 대한 기본 정밀도 및 스케일은 무엇입니까?
Oracle에서 NUMBER 유형의 열을 작성할 때 정밀도 또는 스케일을 지정하지 않는 옵션이 있습니다. 이러한 기본값을 지정하지 않으면 어떻게됩니까?
NUMBER (정밀도, 척도)
정밀도가 지정되지 않은 경우 열은 주어진 값을 저장합니다. 스케일이 지정되지 않은 경우 스케일은 0입니다.
더 많은 정보 :
http://download.oracle.com/docs/cd/B28359_01/server.111/b28318/datatype.htm#CNCPT1832
NUMBER
유형을 지정할 수 있습니다 다른 스타일 :
결과 결과 정밀도 사양 정밀 스케일 확인 설명 ――――――――――――――――――――――――――――――――――――――――――――――――― ―――――――――――――――――――――――――――― NUMBER NULL NULL NO '최대 범위 및 정밀도' , 값은 '주어진대로' 저장됩니다. NUMBER (P, S) PS 예 오류 코드 : ORA-01438 NUMBER (P) P 0 예 오류 코드 : ORA-01438 NUMBER (*, S) 38 S 아니오
정밀도는 총 자릿수이고 스케일은 소수점의 오른쪽 또는 왼쪽 (음수 스케일) 자릿수입니다.
Oracle은 ORA-01438을 다음과 같이 지정합니다.
이 열에 허용 된 지정된 정밀도보다 큰 값
표에 설명 된대로이 무결성 검사는 정밀도가 명시 적으로 지정된 경우에만 활성화됩니다. 그렇지 않으면 Oracle은 지정되지 않은 방법을 사용하여 삽입되거나 업데이트 된 값을 자동으로 반올림합니다.
기본 정밀도는 38이고 기본 배율은 0입니다. 그러나이 열 인스턴스의 실제 크기는 동적입니다. 값을 저장하는 데 필요한만큼의 공간 또는 최대 21 바이트가 필요합니다.
Oracle
다음과 같은 방식으로 숫자를 저장합니다. 1 byte
거듭 제곱의 1 byte
경우 첫 번째 유효 숫자 (구분자 앞의 하나), 나머지는 다른 숫자에 대해 저장합니다.
으로 digits
여기 Oracle
수단 centesimal digits
(예 base 100
)
SQL> INSERT INTO t_numtest VALUES (LPAD('9', 125, '9'))
2 /
1 row inserted
SQL> INSERT INTO t_numtest VALUES (LPAD('7', 125, '7'))
2 /
1 row inserted
SQL> INSERT INTO t_numtest VALUES (LPAD('9', 126, '9'))
2 /
INSERT INTO t_numtest VALUES (LPAD('9', 126, '9'))
ORA-01426: numeric overflow
SQL> SELECT DUMP(num) FROM t_numtest;
DUMP(NUM)
--------------------------------------------------------------------------------
Typ=2 Len=2: 255,11
Typ=2 Len=21: 255,8,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,79
보시다시피, 여기에서 최대 수는 7.(7) * 10^124
이고, 그는 19
정밀도에 대한 센티 38
멀 자릿수 또는 십진수를 가지고 있습니다.
실제로 언제든지 직접 테스트 할 수 있습니다.
CREATE TABLE CUSTOMERS ( CUSTOMER_ID NUMBER NOT NULL, JOIN_DATE DATE NOT NULL, CUSTOMER_STATUS VARCHAR2(8) NOT NULL, CUSTOMER_NAME VARCHAR2(20) NOT NULL, CREDITRATING VARCHAR2(10) ) ;
select column_name, data_type, nullable, data_length, data_precision, data_scale from user_tab_columns where table_name ='CUSTOMERS';
사람들이 스스로 시도 할 필요가 없도록 스펙트럼의 답변을 확장합니다.
이것은 Oracle Database 11g Express Edition Release 11.2.0.2.0-Production에서 수행되었습니다.
CREATE TABLE CUSTOMERS
(
CUSTOMER_ID NUMBER NOT NULL,
FOO FLOAT NOT NULL,
JOIN_DATE DATE NOT NULL,
CUSTOMER_STATUS VARCHAR2(8) NOT NULL,
CUSTOMER_NAME VARCHAR2(20) NOT NULL,
CREDITRATING VARCHAR2(10)
);
select column_name, data_type, nullable, data_length, data_precision, data_scale
from user_tab_columns where table_name ='CUSTOMERS';
어느 양보
COLUMN_NAME DATA_TYPE NULLABLE DATA_LENGTH DATA_PRECISION DATA_SCALE
CUSTOMER_ID NUMBER N 22
FOO FLOAT N 22 126
JOIN_DATE DATE N 7
CUSTOMER_STATUS VARCHAR2 N 8
CUSTOMER_NAME VARCHAR2 N 20
CREDITRATING VARCHAR2 Y 10
'program tip' 카테고리의 다른 글
최소 Aurelia 프로젝트를 처음부터 설정하는 방법 (0) | 2020.12.05 |
---|---|
Xcode 8 Objective-C 카테고리 경고 (0) | 2020.12.05 |
STL 컨테이너의 끝 반복자와 동일한 반복기를 증가 시키면 어떻게 되나요? (0) | 2020.12.05 |
클라이언트 측 웹 개발에 Python을 사용할 수 있습니까? (0) | 2020.12.05 |
HTML의 텍스트 상자에서 글꼴 크기를 변경하는 방법 (0) | 2020.12.05 |