使用选项1.无论精度和规模如何,NUMBER都是Oracle的内部编号。
选项2似乎是一个可怕的维护噩梦从一开始,如果您决定改变其中一个值的精度,您会做什么?
编辑:为了说明,考虑:
SQL> CREATE TABLE testing (n1 NUMBER(38,12), n2 NUMBER(5));
Table created
SQL> INSERT INTO testing VALUES (1, 1);
1 row inserted
SQL> INSERT INTO testing VALUES (990, 9900);
1 row inserted
SQL> INSERT INTO testing VALUES (1999999.999999, 1);
1 row inserted
SQL> SELECT n1, DUMP(n1) n1d, n2, DUMP(n2) n2d FROM testing;
N1 N1D N2 N2D
--------------------- ------------------------------ ------ --------------------
1.000000000000 Typ=2 Len=2: 193,2 1 Typ=2 Len=2: 193,2
990.000000000000 Typ=2 Len=3: 194,10,91 9900 Typ=2 Len=2: 194,100
1999999.999999000000 Typ=2 Len=8: 196,2,100,100,100 1 Typ=2 Len=2: 193,2
,100,100,100
SQL>
存储无差异。存储的长度与数据有关,而不是列定义的精度/比例。
This link给出了如何存储NUMBER类型的相当好的解释。这并不像比较这些值来了解给定数量需要多少存储空间。例如,它需要3个字节来存储数字990,但只有2个字节来存储9900.
按我自己的意见,选项1将更容易实现和维护,但我将失去大量数据存储在一个大型数据类型的效率很多。 – Steven 2009-06-24 20:31:59