문제

Oracle에서 유형 번호 열을 만들 때 정밀 또는 스케일을 지정하지 않는 옵션이 있습니다. 이 기본값은 지정하지 않으면 어떻게합니까?

도움이 되었습니까?

해결책

숫자 (정밀, 스케일)

정밀도가 지정되지 않은 경우 열은 주어진대로 값을 저장합니다. 스케일이 지정되지 않으면 스케일은 0입니다.

더 많은 정보 :

http://download.oracle.com/docs/cd/b28359_01/server.111/b28318/datatype.htm#cncpt1832

다른 팁

그만큼 NUMBER 유형을 지정할 수 있습니다 다른 스타일:

                Resulting  Resulting  Precision
Specification   Precision  Scale      Check      Comment
―――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――
NUMBER          NULL       NULL       NO         '최대 범위 and 정도',
                                                 values are stored '주어진'
NUMBER(P, S)    P          S          YES        Error code: ORA-01438
NUMBER(P)       P          0          YES        Error code: ORA-01438
NUMBER(*, S)    38         S          NO

여기서 정밀도는 총 숫자 수와 스케일이 소수점의 오른쪽 또는 왼쪽 (음의 스케일) 수입니다.

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 릴리스 11.2.0.2.0- 프로덕션에서 수행되었습니다.

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    
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top