当创建类型NUMBER的Oracle中的列中,你没有指定精度或标度的选择。什么,如果你不指定它们这些默认办?

有帮助吗?

解决方案

NUMBER(精度,小数)

如果未指定精度时,作为给定的列中存储的值。如果没有指定刻度,刻度为零。

在很多的详细信息:

http://download.oracle。 COM /文档/ CD / B28359_01 / server.111 / b28318 / datatype.htm#CNCPT1832

其他提示

NUMBER类型可以在不同风格

                Resulting  Resulting  Precision
Specification   Precision  Scale      Check      Comment
―――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――
NUMBER          NULL       NULL       NO         'maximum range and precision',
                                                 values are stored 'as given'
NUMBER(P, S)    P          S          YES        Error code: ORA-01438
NUMBER(P)       P          0          YES        Error code: ORA-01438
NUMBER(*, S)    38         S          NO

其中精度的数字和刻度的总数是数量 小数点的数字的左边或右边(负标度)。

甲骨文指定ORA-01438作为

  

值大于允许此列指定的精度较大

如表中所指出的,这个完整性检查是,如果精度唯一活性 明确规定。否则,甲骨文默默轮插入或更新 使用一些未指定的方法的值。

相信默认精度为38,默认比例为零。 然而此列的一个实例的实际大小,是动态的。根据需要来存储值,或最大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数据库11g快捷版发布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