sql >> Databasteknik >  >> RDS >> Oracle

Vilken .NET-datatyp är bäst för att kartlägga datatypen NUMBER Oracle i NHibernate?

Jag har sett decimal användas istället för int/long i olika exempel. Jag försöker bara förstå varför

Det beror förmodligen på att .NET decimal och Oracle NUMBER kartor lite bättre än long och NUMBER och det ger dig också mer flexibilitet. Om du i ett senare skede lägger till en skala i Oracle-kolumnen skulle du inte behöva ändra datatyp om du redan använde decimal .

decimal är säkert långsammare än int och long eftersom de två senare stöds i hårdvara. Som sagt, du måste krossa en seriös mängd data för att det ska göra någon skillnad. Jag tycker fortfarande att du ska använda long om det är det du har att göra med och då bör du också låta tabellkolumndefinitionerna representera det. NUMBER(18,0) under long och så vidare.

Orsaken decimal kartor lite bättre är att long är 64 bitar och decimal är (typ) 128 bitar.

.NET

Typ:decimal
Ungefärligt intervall:±1,0 × 10^−28 till ±7,9 × 10^28
Precision:28-29 signifikanta siffror

Typ:lång
Omfång:–9 223 372 036 854 775 808 till 9 223 372 036 854 775 807
Precision:18 (19 för långa) signifikanta siffror

Oracle

NUMBER standard till 38 signifikanta siffror och skala 0 (heltal).

Skriv:NUMBER
Omfång:+- 1 x 10^-130 till 9,99...9 x 10^125
Precision:38 signifikanta siffror

Microsoft är medveten om problemet och noterar

Denna datatyp är ett alias för datatypen NUMBER(38) och är utformad så att OracleDataReader returnerar ett System.Decimal eller OracleNumber istället för ett heltalsvärde. Användning av datatypen .NETFramework kan orsaka ett överflöde.

När du tänker på det behöver du faktiskt BigInteger för att kunna representera samma antal signifikanta siffror som till vilket NUMBER standard till. Jag har aldrig sett någon göra det och jag skulle anta att det är ett mycket sällsynt behov. Även BigInteger skulle fortfarande inte klippa det sedan NUMBER kan vara av positiv och negativ oändlighet.



  1. SQL-fråga för att hitta den sista dagen i månaden

  2. Hur man skapar en databas från ett skript i MySQL

  3. BIN_TO_NUM() Funktion i Oracle

  4. Alternativ till att använda LIMIT nyckelord i en underfråga i MYSQL