--对数据类型Number(p,s)的学习总结
--创建表
--create table test(sno number(3,1));
--假设:p代表的是变量的有效数位数,s代表小数点后精确位数.如果欲不出现错误,则需要满足有效数位数外还应该满足精度要求
--则设计以下用例
--insert into test values(1);--等价于1.0,符合条件
--insert into test values(10);--等价于10。0,符合条件
--insert into test values(100);--等价于100.0,符合条件
--insert into test values(1000);--等价于1000.0有效数位数越界,应该报错
--insert into test values(1.01);--精度不符合要求,应该报错
--insert into test values(100.1);--有效数位数不符合要求,因为此时有效位为4,而不是要求的3,故报错
以上为假设,下面为执行的结果
insert into test values(1);
--等价于1.0,符合条件
已创建 1 行。
insert into test values(10);
--等价于10。0,符合条件
已创建 1 行。
insert into test values(100);
--等价于100.0,符合条件
insert into test values(100)
                        *
ERROR 位于第 1 行:
ORA-01438: 值大于此列指定的允许精确度
insert into test values(1000);
--等价于1000.0有效数位数越界,应该报错
insert into test values(1000)
                        *
ERROR 位于第 1 行:
ORA-01438: 值大于此列指定的允许精确度
insert into test values(1.01);
--精度不符合要求,应该报错
已创建 1 行。
insert into test values(100.1);
--有效数位数不符合要求,因为此时有效位为4,而不是要求的3,故报错
insert into test values(100.1)
                        *
ERROR 位于第 1 行:
ORA-01438: 值大于此列指定的允许精确度
 
insert into test values(1.512);
--应该报错,可是没有
已创建 1 行。
查询后得到 1.5
======================================================
通过以上测试用例可知:p在此处的意义应该是有效数位数,s的意义为插入到表中的值是精确到小数点后的s位,同时有一点是很重要的。那就是:在将值插入到表中时候,首先进行了四舍五入以精确值到小数点后的s位,随后进行了有效数位数判断。
posted on 2006-11-30 10:11  ipusr  阅读(1033)  评论(0)    收藏  举报