oracle中number型字段长度、精度及实际存储状态测试
2010-07-22 09:37
519 查看
工作中经常要遇到这种字段的处理情况,当然以前也见过大虾总结过。但是看了之后,又还给人家。是人家的终究还是人家的,需要自己亲自测试并总结才能变成自己的。
相关知识回顾:
有效数位:从左边第一个不为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>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)
相关知识回顾:
有效数位:从左边第一个不为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>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)
相关文章推荐
- oracle中number型字段长度、精度及实际存储状态测试
- oracle :测试char与varchar存储长度
- oracle 实际值超过数据库某个字段指定长度报错解决
- java获取sql,oracle的字段详细信息(字段类型,长度,精度)
- oracle采用分区表+字段索引测试存储大量数据
- [Oracle]存储汉字字段长度
- C#中去的Oracle中的表字段类型,长度,精度
- 【Oracle】查询字段的长度、类型、精度、注释等信息
- oracle 实际值超过数据库某个字段指定长度报错解决
- Oracle存储汉字字段长度
- [Oracle]存储汉字字段长度
- Oracle的Number型数值存储及转换
- 在ORACLE中修改字段的长度
- Oracle获取表结构信息:表名、是否视图、字段名、类型、长度、非空、主键
- mysql存储最大字段数,长度含义
- Oracle 修改字段类型和长度
- oracle 修改字段名, 字段长度
- oracle的表名、字段名、constraint名的长度限制分别是多少?
- 用oracle的java存储过程实现BLOB字段的字符串读取
- Java 存储和读取 oracle CLOB 类型字段的实用方法