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