2017-08-02 4 views
0

Was ist die Genauigkeit des Wertes, der zu einem Operator auf 2 Oracle Standard/wie angegebene NUMBER Spalten führt (wo NUMBER keine (p, s) gesetzt hat))? Wie, wenn ich:Ergebnisgenauigkeit der Operationen auf 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; 

Wird f1df2 sein ,3666666666666 ... 7?

Antwort

0

Wird f1df2 0.3666666666666 ... 7 sein?

Ja.

In NUMBER eingefügte Nummern, die ohne Einstellung p,s erstellt wurden, werden 'as given' gespeichert. Die sich ergebende Genauigkeit einer Operation an diesen Spalten erscheinen die Präzision und die Skala von höchster Präzision und Maßstab Spalte zu sein:

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 

Ergebnisse in:

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

Beachten Sie, dass dies wahr ist, selbst wenn f1 war neu definiert zu NUMBER(p, 1)! Es scheint, dass die Definition von (p,s) für ein Feld NUMBER nur die Genauigkeit der Daten einschränkt, die in das Feld eingegeben werden.

Was passiert nun, wenn wir den willkürlichen Genauigkeitstyp mit einem Float mischen? Nun, nach Oracle Numeric Precedence Regeln:

  • Wenn einer der Operanden BINARY_DOUBLE ist, dann Oracle alle Operanden implizit BINARY_DOUBLE zu konvertieren versucht vor der Durchführung der Operation.

  • Wenn keiner der Operanden BINARY_DOUBLE ist, aber jeder der Operanden BINARY_FLOAT ist, versucht Oracle, alle Operanden implizit in BINARY_FLOAT zu konvertieren, bevor die Operation ausgeführt wird.

  • Andernfalls versucht Oracle alle Operanden Zahl zu konvertieren, bevor die Operation

Durchführung