操作员在2个Oracle默认/给定NUMBER列上的值的精确度是多少(其中NUMBER没有设置(p,s)))?就像我:
create table foo(field1 NUMBER, field2 NUMBER);
insert into foo (field1, field2) values (1.1, 3);
select field1/field2 as f1df2 from foo;
请f1df2
为0.3666666666666 ... 7?
答案 0 :(得分:0)
请
f1df2
为0.3666666666666 ... 7?
是
在未设置NUMBER
的情况下创建的p,s
列中插入的数字已存储'as given'。在这些列上产生的操作精度似乎是最高精度和比例列的精度和比例:
create table test_number(f1 number, f2 number, f3 integer);
-- remember integer in Oracle is NUMBER(38)
insert into test_number (f1, f2, f3) values (1.1, 3, 4);
select f1/f2 as f1df2, f2/f3 as f2df3 from test_number
结果:
F1DF2 |F2DF3
------------------------------------------|-----
0.3666666666666666666666666666666666666667|0.75
请注意,即使将f1
重新定义为NUMBER(p, 1)
,也是如此!似乎为(p,s)
定义NUMBER
字段仅限制输入到字段中的数据的精度。
现在,如果我们将任意精度类型与float混合会发生什么?好吧,根据Oracle Numeric Precedence规则:
如果任何操作数是BINARY_DOUBLE,则Oracle会在执行操作之前尝试将所有操作数隐式转换为BINARY_DOUBLE。
如果没有操作数是BINARY_DOUBLE但任何操作数都是BINARY_FLOAT,那么Oracle会在执行操作之前尝试将所有操作数隐式转换为BINARY_FLOAT。
否则,Oracle会在执行操作之前尝试将所有操作数转换为NUMBER