Home >Database >Mysql Tutorial >oracle number 类型

oracle number 类型

WBOY
WBOYOriginal
2016-06-07 15:26:481846browse

在Oracle中Number类型可以用来存储0,正负定点或者浮点数。 number类型占用0-22个字节,它实际上是磁盘上的一个变长数据类型,是oracle根据一定算法,采用尽可能少存储空间表示一个数。 Number的数据声明如下: 表示 作用 说明 Number(p, s) 声明一个定点数

在Oracle中Number类型可以用来存储0,正负定点或者浮点数。number类型占用0-22个字节,它实际上是磁盘上的一个变长数据类型,是oracle根据一定算法,采用尽可能少存储空间表示一个数。

Number的数据声明如下:

表示 作用 说明

Number(p, s) 声明一个定点数 p(precision)为精度,s(scale)表示小数点右边的数字个数,精度最大值为38,scale的取值范围为-84到127

Number(p) 声明一个整数 相当于Number(p, 0)

Number 声明一个浮点数 其精度为38,要注意的是scale的值没有应用,也就是说scale的指不能简单的理解为0,或者其他的数。

定点数的精度(p)和刻度(s)遵循以下规则:

 当一个数的整数部分的长度 > p-s 时,Oracle就会报错

 当一个数的小数部分的长度 > s 时,Oracle就会舍入。

 当s(scale)为负数时,Oracle就对小数点左边的s个数字进行舍入。

 当s > p 时, p表示小数点后第s位向左最多可以有多少位数字,如果大于p则Oracle报错,小数点后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>commit;

提交完成。

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>commit;

提交完成。

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>commit;

提交完成。

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>commit;

提交完成。

hongsy@test>select num4 from hongsy;

      NUM4
----------

 

 

 

 

 


      1100
    111100

已选择14行。

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

已创建 1 行。

hongsy@test>commit;

提交完成。

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)


Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn