oracle中扩充number类型
2017-09-09 16:27
204 查看
扩充number类型字段精度
周五收到需求要给数据库表中一个number类型的字段增加精度,从保留2位小数位变为保留8位小数位。按照正常数据库字段变更的顺序,应该是这么做:
新建一张表从原表复制全部表结构和数据;
清空原表所有的数据;
修改原表字段属性;
从临时表拖回全部数据;
删除临时表
代码如下:
CREATE TABLE TABLE_BAK AS SELECT * FROM TABLE; TRUNCATE TABLE TABLE; ALTER TABLE TABLE MODIFY CZ_PERC NUMBER(20,8); INSERT INTO TABLE (SELECT * FROM TABLE_BAK); DROP TABLE TABLE_BAK;
这个地方注意一下number类型,这个字段最开始是(10,2),我在修改的第一次修改成了(10,8),字段修改的sql没有问题,可在插入数据的时候就开始报字段超长错误。按理讲我扩充了字段有效小数位,是不应该出现这种问题的,但由于没有注意到原来number类型的有效位数是10,导致表结构修改后只能插入大小介于0-100之间的数字,原有数据中如果有超过100的数字,就会超长而不能插入。
number类型字段详解
number(m,n),其中m表示当前字段的有效数字位数,n表示小数位位数,oracle对m和n的取值范围也做了一定的限制:1 <= m <= 38
-84 <= n <= 127
n > 0
精确到小数点右边n位,并四舍五入。然后检验有效位是否 <= m。
n < 0
精确到小数点左边n位,并四舍五入。然后检验有效位是否 <= m + |n|。
n = 0
此时NUMBER表示整数。
相关文章推荐
- oracle转Mysql中,varchar2(10)和number应该转换为什么类型?
- 转:oracle number(p,s)数据类型
- oracle中number数据类型的存储以及最大值问题
- oracle 中的数据类型:number(p,s) 和date类型(日期型数据)
- oracle中将number类型毫秒值转为时间类型
- oracle转Mysql中,varchar2(10)和number应该转换为什么类型? (转)
- oracle中的number数据类型的浅析
- oracle的number数据类型
- Oracle Number类型
- Oracle中的Number和Float类型
- Oracle中number数据类型所占用的字节数
- ORACLE 之 NUMBER 类型规则描述(转自水牛博客)
- Oracle NUMBER数据类型
- ORACLE NUMBER类型详解(二)
- oracle中数据类型number(m,n)
- Oracle Number类型超长小数位为0问题
- oracle表中列的类型。number和integer区别
- oracle的number类型精度、刻度范围
- oracle 的number类型