Ik heb in verschillende voorbeelden decimalen gebruikt in plaats van int/long. Ik probeer gewoon te begrijpen waarom
Dat komt waarschijnlijk omdat .NET decimal
en Oracle NUMBER
kaarten een beetje beter dan long
en NUMBER
en het geeft je ook meer flexibiliteit. Als u in een later stadium een schaal toevoegt in de Oracle-kolom, dan zou u het datatype niet hoeven te veranderen als u al decimal
had gebruikt .
decimal
is zeker langzamer dan int
en long
aangezien de laatste twee hardwarematig worden ondersteund. Dat gezegd hebbende, je moet een serieuze hoeveelheid gegevens verwerken om enig verschil te maken. Ik denk nog steeds dat je long
. moet gebruiken als dat is waar je mee te maken hebt en dan zou je ook de tabelkolomdefinities dat moeten laten vertegenwoordigen. NUMBER(18,0)
voor long
enzovoort.
De reden decimal
kaarten een beetje beter is dat long
is 64 bits en decimal
is (soort van) 128 bits.
.NET
Typ:decimaal
Geschat bereik:±1,0 × 10^−28 tot ±7,9 × 10^28
Precisie:28-29 significante cijfersTyp:lang
Bereik:–9.223.372.036.854.775.808 tot 9.223.372.036.854.775.807
Precisie:18 (19 voor ulong) significante cijfers
Oracle
NUMBER
standaard ingesteld op 38 significante cijfers en schaal 0 (geheel getal).
Typ:NUMBER
Bereik:+- 1 x 10^-130 tot 9,99...9 x 10^125
Precisie:38 significante cijfers
Microsoft is op de hoogte van het probleem en merkt op
Dit gegevenstype is een alias voor het gegevenstype NUMBER (38) en is zo ontworpen dat de OracleDataReader een System.Decimal of OracleNumber retourneert in plaats van een geheel getal. Het gebruik van het .NETFramework-gegevenstype kan een overloop veroorzaken.
Nu ik erover nadenk, heb je eigenlijk BigInteger
nodig om hetzelfde aantal significante cijfers te kunnen vertegenwoordigen als wat NUMBER
standaard ingesteld op. Ik heb nog nooit iemand dat zien doen en ik denk dat het een zeer zeldzame behoefte is. Ook BigInteger
zou het nog steeds niet redden sinds NUMBER
kan van positieve en negatieve oneindigheid zijn.