oracle number mysql_oracle number 类型

在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)

f68f2add0b68e4f9810432fce46917b7.png

本文原创发布php中文网,转载请注明出处,感谢您的尊重!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值