Mat*_*att 64 database oracle number-formatting
在Oracle中创建NUMBER类型的列时,您可以选择不指定精度或比例.如果您不指定它们,这些默认值会怎样?
小智 40
NUMBER(精度,比例)
如果未指定精度,则列将值存储为给定值.如果未指定比例,则比例为零.
更多信息:
http://download.oracle.com/docs/cd/B28359_01/server.111/b28318/datatype.htm#CNCPT1832
max*_*zig 23
该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
精度是总位数,刻度是小数点右或左(负刻度)的位数.
Oracle将ORA-01438指定为
值大于此列允许的指定精度
如表中所示,此完整性检查仅在显式指定精度时才有效.否则,Oracle使用一些未指定的方法静默舍入插入或更新的值.
bar*_*tta 14
我相信默认精度为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
Run Code Online (Sandbox Code Playgroud)
我们可以看到,这里的最大数是7.(7) * 10^124,并且他有19精度的38十进制数字或十进制数字.
小智 5
实际上,您始终可以自己进行测试。
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';
| 归档时间: |
|
| 查看次数: |
171075 次 |
| 最近记录: |