sql >> Database >  >> RDS >> Oracle

Welk .NET-gegevenstype is het beste voor het toewijzen van het NUMBER Oracle-gegevenstype in NHibernate?

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 cijfers

Typ: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.



  1. LAGER LIKE vs iLIKE

  2. Instellen en identificeren van rijdoelen in uitvoeringsplannen

  3. Updatebewerkingen uitvoeren op kolommen van het type JSONB in ​​Postgres 9.4

  4. MSSQL-fout 'De onderliggende provider is mislukt bij Open'