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
实际上,你可以自己测试。 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';
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
7条答案
按热度按时间xoshrz7s1#
编号(精度、刻度)
如果未指定精度,则该列按给定值存储。如果未指定比例,则比例为零。
更多信息:
http://download.oracle.com/docs/cd/B28359_01/server.111/b28318/datatype.htm#CNCPT1832
o2g1uqev2#
NUMBER
类型可以以不同的样式指定:其中,精度是总位数,小数位数是小数点右边或左边的位数(负小数位数)。
Oracle将ORA-01438指定为
值大于此列允许的指定精度
如表中所示,仅当显式指定精度时,此完整性检查才处于活动状态。否则,Oracle会使用某些未指定的方法对插入或更新的值进行静默舍入。
a2mppw5e3#
我相信默认精度是38,默认比例是零。但是,此列示例的实际大小是动态的。它将根据需要占用尽可能多的空间来存储值,或最大21字节。
qc6wkl3g4#
Oracle
按以下方式存储数字:1 byte
表示幂,1 byte
表示第一个有效数位(即分隔符之前的一位),其余的表示其他数字。这里的
digits
是指centesimal digits
(i. e.base 100
)正如我们所看到的,这里的最大数是
7.(7) * 10^124
,并且他有19
个十进制数位用于精度,或者38
个十进制数位。ee7vknir5#
实际上,你可以自己测试。
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';
thigvfpy6#
我扩展了光谱的答案,这样人们就不必亲自尝试了。
这是在Oracle Database 11 g Express Edition Release 11.2.0.2.0 - Production上完成的。
从而产生
ogsagwnx7#
目前接受的答案不正确:
如果未指定比例,则比例为零。
仅当指定了精度时才为真。
否则,对于类型为NUMBER的列,将使用最大小数位数(由于某种原因,似乎没有在任何地方指定此最大小数位数)。
Oracle的下表演示了以下行为:
| 输入数据|指定为|存储为|
| --------------|--------------|--------------|
| 一百二十三点八九|数量|一百二十三点八九|
| 一百二十三点八九|数量(3)|一百二十四|
https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/Data-Types.html#GUID-75209AF6-476D-4C44-A5DC-5FA70D701B78__G196646