Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Welcher .NET-Datentyp eignet sich am besten zum Zuordnen des Oracle-Datentyps NUMBER in NHibernate?

Ich habe gesehen, dass dezimal in verschiedenen Beispielen anstelle von int/long verwendet wurde. Ich versuche nur zu verstehen warum

Das liegt wahrscheinlich daran, dass .NET decimal ist und Oracle NUMBER Karten etwas besser als long und NUMBER und es gibt Ihnen auch mehr Flexibilität. Wenn Sie zu einem späteren Zeitpunkt eine Skala hinzufügen in der Oracle-Spalte müssten Sie den Datentyp nicht ändern, wenn Sie bereits decimal verwendet hätten .

decimal ist sicherlich langsamer als int und long da die beiden letzteren in der Hardware unterstützt werden. Das heißt, Sie müssen eine ernsthafte Menge an Daten verarbeiten, damit es einen Unterschied macht. Ich denke immer noch, dass Sie long verwenden sollten Wenn Sie es damit zu tun haben, sollten Sie dies auch durch die Tabellenspaltendefinitionen darstellen lassen. NUMBER(18,0) für long und so weiter.

Der Grund decimal Karten etwas besser ist das long ist 64 Bit und decimal ist (irgendwie) 128 Bit.

.NET

Typ:dezimal
Ungefährer Bereich:±1,0 × 10^−28 bis ±7,9 × 10^28
Genauigkeit:28–29 signifikante Stellen

Typ:lang
Bereich:–9.223.372.036.854.775.808 bis 9.223.372.036.854.775.807
Genauigkeit:18 (19 für ulong) signifikante Stellen

Orakel

NUMBER standardmäßig 38 signifikante Stellen und Skalierung 0 (Ganzzahl).

Geben Sie ein:ZAHL
Bereich:+- 1 x 10^-130 bis 9,99...9 x 10^125
Genauigkeit:38 signifikante Stellen

Microsoft ist sich des Problems bewusst und weist darauf hin

Dieser Datentyp ist ein Alias ​​für den Datentyp NUMBER(38) und ist so konzipiert, dass der OracleDataReader eine System.Decimal- oder OracleNumber anstelle eines ganzzahligen Werts zurückgibt. Die Verwendung des .NETFramework-Datentyps kann zu einem Überlauf führen.

Wenn ich darüber nachdenke, brauchen Sie eigentlich BigInteger dieselbe Anzahl signifikanter Stellen darstellen zu können wie NUMBER standardmäßig auf. Ich habe noch nie jemanden gesehen, der das tut, und ich würde annehmen, dass es ein sehr seltenes Bedürfnis ist. Auch BigInteger würde es seit NUMBER immer noch nicht schneiden kann positiv und negativ unendlich sein.