Oracle的NUMBER数据类型特点 _MySQL, Oracle及数据库讨论区_Weblogic技术|Tuxedo技术|中间件技术|Oracle论坛|JAVA论坛|Linux/Unix技术|hadoop论坛_联动北方技术论坛  
网站首页 | 关于我们 | 服务中心 | 经验交流 | 公司荣誉 | 成功案例 | 合作伙伴 | 联系我们 |
联动北方-国内领先的云技术服务提供商
»  游客             当前位置:  论坛首页 »  自由讨论区 »  MySQL, Oracle及数据库讨论区 »
总帖数
1
每页帖数
101/1页1
返回列表
0
发起投票  发起投票 发新帖子
查看: 2628 | 回复: 0   主题: Oracle的NUMBER数据类型特点         下一篇 
gunrose
注册用户
等级:新兵
经验:36
发帖:79
精华:0
注册:2011-7-21
状态:离线
发送短消息息给gunrose 加好友    发送短消息息给gunrose 发消息
发表于: IP:您无权察看 2015-6-25 14:10:13 | [全部帖] [楼主帖] 楼主

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


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类型。
    

--转自 北京联动北方科技有限公司




赞(0)    操作        顶端 
总帖数
1
每页帖数
101/1页1
返回列表
发新帖子
请输入验证码: 点击刷新验证码
您需要登录后才可以回帖 登录 | 注册
技术讨论