问题:每次在定义column或者 variable的时候,如果严格定义的number类型的precision,隔或长或
短的一段时间总会发现 把Numberic error的错误。那么
①怎么避免这种情况的发生?
②不指定precision可不可以?
③可以的话,那可行不可行,会不会占用空间,导致存储上的浪费?
④至少varchar2类型 是必须指定precision的。
对于②提出的方法进行简单测试:
SQL> create table test_default (
2 code number
3 )
4 /
表已创建。
SQL> insert into test_default
2 values(123.89);
已创建 1 行。
SQL> insert into test_default
2 values(0);
已创建 1 行。
SQL> insert into test_default
2 values(1);
已创建 1 行。
SQL> insert into test_default
2 values(2);
已创建 1 行。
SQL> insert into test_default
2 values(25);
已创建 1 行。
SQL> insert into test_default
2 values(4100)
3 /
已创建 1 行。
SQL> insert into test_default
2 values(132004078);
已创建 1 行。
SQL> insert into test_default
2 values(2.01);
已创建 1 行。
SQL> insert into test_default
2 values(0.3)
3 /
已创建 1 行。
SQL> insert into test_default
2 values(0.00000125)
3 /
已创建 1 行。
SQL> insert into test_default
2 values(115.200003)
3 /
已创建 1 行。
SQL> insert into test_default
2 values(-1);
已创建 1 行。
SQL> insert into test_default
2 values(-5)
3 /
已创建 1 行。
SQL> insert into test_default
2 values(-20032)
3 /
已创建 1 行。
SQL> insert into test_default
2 values(-234.432)
3 /
已创建 1 行。
SQL> commit;
提交完成。
insert into test_default
values(10000)
/
insert into test_default
values(100000)
/
insert into test_default
values(1000000)
/
insert into test_default
values(-123456.78901)
/
insert into test_default
values(-123456.789)
/
insert into test_default
values(100000000000000000000000000000000000)
SQL> col code format 999999999
SQL> select code,dump(code) from
test_default
2 /
CODE DUMP(CODE)
----------
--------------------------------------------------------------------------------
1 Typ=2 Len=2: 193,2
25 Typ=2 Len=2: 193,26
2.01 Typ=2 Len=3: 193,3,2
100000 Typ=2
Len=2: 195,11
1000000 Typ=2 Len=2:
196,2
123.89 Typ=2
Len=4: 194,2,24,90
132004078 Typ=2 Len=6: 197,2,33,1,41,79
1.25E-6 Typ=2 Len=3:
190,2,26
10000 Typ=2 Len=2: 195,2
2 Typ=2 Len=2: 193,3
-234.432 Typ=2 Len=6: 61,99,67,58,81,102
4100 Typ=2 Len=2: 194,42
0.3 Typ=2 Len=2: 192,31
-123456.78 Typ=2 Len=7: 60,89,67,45,23,11,102
1E35 Typ=2 Len=2: 210,11
-123456.78 Typ=2 Len=8: 60,89,67,45,23,11,91,102
115.200003 Typ=2 Len=6: 194,2,16,21,1,4
-1 Typ=2 Len=3: 62,100,102
-20032 Typ=2
Len=5: 60,99,101,69,102
-5 Typ=2 Len=3: 62,96,102
CODE DUMP(CODE)
----------
--------------------------------------------------------------------------------
0 Typ=2 Len=1: 128
SQL> select code,dump(code,16) from
test_default;
CODE DUMP(CODE,16)
----------
--------------------------------------------------------------------------------
1 Typ=2 Len=2: c1,2
25 Typ=2 Len=2: c1,1a
2.01 Typ=2 Len=3: c1,3,2
100000 Typ=2
Len=2: c3,b
1000000 Typ=2 Len=2:
c4,2
123.89 Typ=2
Len=4: c2,2,18,5a
132004078 Typ=2 Len=6: c5,2,21,1,29,4f
1.25E-6 Typ=2 Len=3:
be,2,1a
10000 Typ=2 Len=2: c3,2
2 Typ=2 Len=2: c1,3
-234.432 Typ=2 Len=6: 3d,63,43,3a,51,66
4100 Typ=2 Len=2: c2,2a
0.3 Typ=2 Len=2: c0,1f
-123456.78 Typ=2 Len=7: 3c,59,43,2d,17,b,66
1E35 Typ=2 Len=2: d2,b
-123456.78 Typ=2 Len=8: 3c,59,43,2d,17,b,5b,66
115.200003 Typ=2 Len=6: c2,2,10,15,1,4
-1 Typ=2 Len=3: 3e,64,66
-20032 Typ=2
Len=5: 3c,63,65,45,66
-5 Typ=2 Len=3: 3e,60,66
CODE DUMP(CODE,16)
----------
--------------------------------------------------------------------------------
0 Typ=2 Len=1: 80
③结论:
首先必要的说明关于dump函数的返回格式类似: