代码部分:
SQL> desc test1123
Name Type Nullable Default Comments
------ ------------- -------- ------- --------
ID INTEGER Y
NAME NCHAR(8) Y
SALARY NUMBER(6,-8) Y
JOB NVARCHAR2(10) Y
SQL> insert into test1123 (name,job,salary,id) values ('hello','水电费水电费萨顶顶',23.2,2);
1 row inserted
SQL> select * from test1123;
ID NAME SALARY JOB
--------------------------------------- ----------------- -------- ---------------------
2 hello 0 水电费水电费萨顶顶
改为 number(6,2)就能写入了,但这个和number(6,-8)不是同一个意思吗
第二个参数为负数时,以number(6,-2)为例,表示有效位6位,取整至小数点前2位,例子中如果输入123456则结果为123500,注意有四舍五入。 你的例子中-8的绝对值大于6,于是6位有效位被全部截掉并取整为0,所以最终结果为0
Oracle中数据类型number(m,n)中m表示的是所有有效数字的位数,n表示的是小数位的位数。m的范围是1-38,即最大38位。
1> .NUMBER类型细讲:
oracle number datatype 语法:NUMBER[(precision [, scale])]
简称:precision --> p
scale --> s
NUMBER(p, s)
范围: 1 <= p <= 38,
-84 <= s <= 127
保存数据范围: -1.0e-130 <= number value < 1.0e+126
保存在机器内部的范围: 1 ~ 22 bytes
有效位:从左边第一个不为0的数算起的位数。
s的情况:
s > 0
精确到小数点右边s位,并四舍五入。然后检验有效位是否 <= p。
s < 0
精确到小数点左边s位,并四舍五入。然后检验有效位是否 <= p + |s|。
s = 0
此时NUMBER表示整数。
谢谢回答,刚刚试了下,的确如此,但是老师在《3-2 oracle管理表之数据类型》里讲的是:number(p,s)中如果s为负数的时候,那么它就表示从最大有效数字到小数点的位数,不知道是不是我理解错了