Oracle Number数据类型及其严格性

时间:2012-04-09 01:16:40

标签: oracle

我对oracle很新,但我在课堂上一直在学习它,最近我遇到了number数据类型。我已经阅读了有关比例和精度(s,p)的文档,但我对该类型的正确用法仍不乐观。

假设我想将百分比值存储为小数。小数可以是0到1之间的任何值,小数点后最多可以包含3个数字。

要存储的一些可能的小数可能包括:

.66
.553
1.00

如果我要使列NUMBER(4,3)能够工作,即使只有两个数字?见下文

.22
.10
.35
etc...

简而言之,数字类型是否要求符合EXACT尺寸?例如。 NUMBER(4,3)绝对要求插入的数据是4个数字,其中3个数字落在小数点后?

感谢您的帮助!

1 个答案:

答案 0 :(得分:2)

列的数据类型限制了可以存储的值的范围。但他们没有做任何事情来强迫特定的长度或精度。

就像您可以在VARCHAR2(100)列中存储单个字符或NULL一样,您可以存储精度小于3位且小于4位数的数字。例如,值0和6.1对于NUMBER(4,3)列都是完全有效的。如果插入一个具有太多精度数字的值,则该值将以静默方式舍入为列定义中指定的精度。

SQL> create table foo (
  2    col1 number(4,3)
  3  );

Table created.

SQL> insert into foo values( 9.999 );

1 row created.

SQL> insert into foo values (0);

1 row created.

SQL> insert into foo values( 6.1 );

1 row created.

SQL> insert into foo values( 1.2345 );

1 row created.

SQL> select * from foo;

      COL1
----------
     9.999
         0
       6.1
     1.235