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 行。
提交完成。
hongsy@test>select num2 from hongsy;
      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 行。
提交完成。
hongsy@test>select num3 from hongsy;
      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: 值大于此列指定的允许精确度
提交完成。
hongsy@test>select num4 from hongsy;
      NUM4
----------
 
 
 
 
 

      1100
    111100
已选择14行。
hongsy@test>insert into hongsy(num4) values(1111111);
已创建 1 行。
提交完成。
hongsy@test>select num4 from hongsy;
      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
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值