oracle精度说明符1~38_oracle中number型字段长度、精度及实际存储状态测试

工作中经常要遇到这种字段的处理情况,当然以前也见过大虾总结过。但是看了之后,又还给人家。是人家的终究还是人家的,需要自己亲自测试并总结才能变成自己的。

相关知识回顾:

有效数位:从左边第一个不为0的数算起,小数点和负号不计入有效位数。

number(p,s)

p:1~38

s:-84~127

p>0,对s分2种情况:

1. s>0

精确到小数点右边s位,并四舍五入。然后检验有效数位是否<=p;如果s>p,小数点右边至少有s-p个0填充。

2. s<0

精确到小数点左边s位,并四舍五入。然后检验有效数位是否<=p+|s|

案例测试:

hongsy@test>desc hongsy;

名称                                                  是否为空? 类型

----------------------------------------------------- -------- ------------

NUM1                                                           NUMBER

NUM2                                                           NUMBER(2)

NUM3                                                           NUMBER(5,3)

NUM4                                                           NUMBER(5,-2)

hongsy@test>insert into hongsy(num1) values(1111111111);

已创建 1 行。

提交完成。

hongsy@test>insert into hongsy(num2) values(11);

已创建 1 行。

hongsy@test>insert into hongsy(num2) values(111);

insert into hongsy(num2) values(111)

*

ERROR 位于第 1 行:

ORA-01438: 值大于此列指定的允许精确度

hongsy@test>insert into hongsy(num2) values(-11);

已创建 1 行。

hongsy@test>insert into hongsy(num2) values(-111);

insert into hongsy(num2) values(-111)

*

ERROR 位于第 1 行:

ORA-01438: 值大于此列指定的允许精确度

hongsy@test>insert into hongsy(num2) values(-11.1);

已创建 1 行。

hongsy@test>insert into hongsy(num2) values(-11.1111);

已创建 1 行。

提交完成。

NUM2

----------

11

-11

-11

-11

已选择8行。

hongsy@test>insert into hongsy(num3) values(111);

insert into hongsy(num3) values(111)

*

ERROR 位于第 1 行:

ORA-01438: 值大于此列指定的允许精确度

hongsy@test>insert into hongsy(num3) values(11);

已创建 1 行。

hongsy@test>insert into hongsy(num3) values(-11);

已创建 1 行。

hongsy@test>insert into hongsy(num3) values(-111);

insert into hongsy(num3) values(-111)

*

ERROR 位于第 1 行:

ORA-01438: 值大于此列指定的允许精确度

hongsy@test>insert into hongsy(num3) values(11.111);

已创建 1 行。

hongsy@test>insert into hongsy(num3) values(11.1111);

已创建 1 行。

提交完成。

NUM3

----------

11

-11

11.111

11.111

已选择12行。

hongsy@test>insert into hongsy(num4) values(1111);

已创建 1 行。

hongsy@test>insert into hongsy(num4) values(111111);

已创建 1 行。

hongsy@test>insert into hongsy(num4) values(11111111);

insert into hongsy(num4) values(11111111)

*

ERROR 位于第 1 行:

ORA-01438: 值大于此列指定的允许精确度

提交完成。

NUM4

----------

1100

111100

已选择14行。

hongsy@test>insert into hongsy(num4) values(1111111);

已创建 1 行。

提交完成。

NUM4

----------

1100

111100

1111100

已选择15行。

hongsy@test>create table hongsy1 (num1 number(39));

create table hongsy1 (num1 number(39))

*

ERROR 位于第 1 行:

ORA-01727: 数字精度说明符超出范围(1 到 38)

hongsy@test>create table hongsy1 (num1 number(38,128));

create table hongsy1 (num1 number(38,128))

*

ERROR 位于第 1 行:

ORA-01728: 数字标度说明符超出范围(-84 到 127)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值