ITPub博客

首页 > 数据库 > Oracle > 【NUMBER】Oracle的NUMBER数据类型特点

【NUMBER】Oracle的NUMBER数据类型特点

原创 Oracle 作者:OCMU联盟 时间:2010-11-13 22:46:23 0 删除 编辑
Oracle的NUMBER数据类型内部使用科学计数法以可变长度格式来存储数据。使用1B存储指数,而另外20B(可变)用于存储该数字剩下的部分。这种存储模式使得NUMBER数据类型可以表示的精度为38位。简单的对Oracle数字类型的存储特点进行简单探索。

1.确定数字所占字节的大小
可以使用vsize函数获得存储数字时占用的字节。
SQL> select vsize(100) from dual;

VSIZE(100)
----------
         2

表示在存储数字100时将会使用2B空间进行存储,其中1B用于存储数字,另外1B用于存储指数。

2.使用dump获取数字的具体存储信息
SQL> select dump(100) from dual;

DUMP(100)
------------------
Typ=2 Len=2: 194,2

3.Oracle NUMBER类型定义的不同形式
Oracle是使用精度(precision)和范围(scale)的方式来定义NUMBER数据类型的。如果使用特定的精度定义NUMBER,当超过所定义的精度时将会抛出“ORA-01438: value larger than specified precision allowed for this column”报错。具体举例如下。

1)定义精度为6,范围为2的字段进行测试
SQL> drop table t purge;

Table dropped.

SQL> create table t (x number(6,2));

Table created.

2)符合精度和范围时,成功插入
SQL> insert into t values(1234.56);

1 row created.

SQL> select * from t;

         X
----------
   1234.56

3)符合精度,但超出范围时,会四舍五入
SQL> insert into t values(123.456);

1 row created.

SQL> select * from t;

         X
----------
   1234.56
    123.46

可见数字“123.456”已被四舍五入为“123.46”。

4)当超出精度时,将抛出ORA-01438错误
SQL> insert into t values(12345.67);
insert into t values(12345.67)
                     *
ERROR at line 1:
ORA-01438: value larger than specified precision allowed for this column

有关数字类型的精度的描述请参见文章《【NUMBER】有关Oracle NUMBER类型定义中precision和scale的测试和总结》(http://space.itpub.net/519536/viewspace-557312)。

5)当定义数字类型时未给出范围的定义时,表示以整数形式存储
SQL> drop table t purge;

Table dropped.

SQL> create table t (x number(1));

Table created.

SQL> insert into t values (1.42312312321);

1 row created.

SQL> select * from t;

         X
----------
         1

SQL> insert into t values (1.52342341234);

1 row created.

SQL> select * from t;

         X
----------
         1
         2

这里同样体现了四舍五入的原则。

4.小结
只要掌握了数字类型精度(precision)和范围(scale)的含义,便可以很好地理解Oracle NUMBER类型。

Good luck.

secooler
10.11.13

-- The End --

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70034820/viewspace-2994235/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
OCM联盟( Oracle Certified Master Union)是由侯圣文(ACE总监)发起的一个公益组织,旨在为每一个OCM大师提供一个可以继续展示自己才华,技术和实力的平台。

注册时间:2007-05-27

  • 博文量
    799
  • 访问量
    8407001