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.