2017-08-02 11 views
0

結果の精度は、2つのOracleデフォルト/指定NUMBER列(NUMBERには(p、s)が設定されていません)の演算子になります。同様の場合:結果の精度はOracle NUMBER

create table foo(field1 NUMBER, field2 NUMBER); 

insert into foo (field1, field2) values (1.1, 3); 

select field1/field2 as f1df2 from foo; 

will f1df2 be 0.3666666666666 ... 7?

答えて

0

will f1df2 be 0.3666666666666 ... 7?

はい。

p,sを設定せずに作成したNUMBER列に挿入された数値は、'as given'に格納されます。これらの列の操作の結果の精度は、最高の精度とスケールカラムの精度やスケールのように見える:これはf1があっても真であることを

F1DF2          |F2DF3 
------------------------------------------|----- 
0.3666666666666666666666666666666666666667|0.75 

注:中

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 

結果NUMBER(p, 1)に再定義されました!NUMBERフィールドに対して(p,s)を定義すると、フィールドに入力されるデータの精度のみが制限されるように見えます。

ここで、任意の精度タイプとfloatを混合するとどうなりますか?まあ、オラクルNumeric Precedence規則に従って:オペランドのいずれかがBINARY_DOUBLEの場合

  • 、Oracleは操作を実行する前にBINARY_DOUBLEに暗黙的にすべてのオペランドを変換しようとします。

  • オペランドのいずれもBINARY_DOUBLEで、オペランドのいずれかがBINARY_FLOATでない場合、Oracleは操作を実行する前にすべてのオペランドを暗黙的にBINARY_FLOATに変換しようとします。

  • そうでない場合、Oracleは

操作を実行する前にNUMBERにすべてのオペランドを変換しようとし
関連する問題