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.