sql >> Databáze >  >> RDS >> Oracle

Který datový typ .NET je nejlepší pro mapování NUMBER datového typu Oracle v NHibernate?

V různých příkladech jsem viděl místo int/long použito desítkové. Jen se snažím pochopit proč

To je pravděpodobně proto, že .NET decimal a Oracle NUMBER mapuje o něco lépe než long a NUMBER a také vám dává větší flexibilitu. Pokud v pozdější fázi přidáte měřítko ve sloupci Oracle, pak byste nemuseli měnit datový typ, pokud jste již použili decimal .

decimal je jistě pomalejší než int a long protože poslední dva jsou podporovány v hardwaru. To znamená, že k tomu, aby se něco změnilo, musíte shromáždit nějaké vážné množství dat. Stále si myslím, že byste měli používat long pokud to je to, s čím máte co do činění, pak byste to měli také nechat reprezentovat definice sloupců tabulky. NUMBER(18,0) pro long a tak dále.

Důvod decimal mapy o něco lepší je, že long je 64 bitů a decimal je (tak trochu) 128 bitů.

.NET

Typ:desítkové
Přibližný rozsah:±1,0 × 10^−28 až ±7,9 × 10^28
Přesnost:28–29 platných číslic

Typ:dlouhý
Rozsah:–9,223,372,036,854,775,808 až 9,223,372,036,854,775,807
Přesnost:18 (19 pro dlouhé) platné číslice

Oracle

NUMBER výchozí hodnota je 38 platných číslic a měřítko 0 (celé číslo).

Typ:NUMBER
Rozsah:+- 1 x 10^-130 až 9,99...9 x 10^125
Přesnost:38 platných číslic

Microsoft si je tohoto problému vědom a poznamenává

Tento datový typ je alias pro datový typ NUMBER(38) a je navržen tak, že OracleDataReader vrací System.Decimal nebo OracleNumber místo celočíselné hodnoty. Použití datového typu .NETFramework může způsobit přetečení.

Když se nad tím zamyslím, skutečně potřebujete BigInteger být schopen reprezentovat stejný počet platných číslic jako NUMBER výchozí na. Nikdy jsem nikoho neviděl dělat to a předpokládám, že je to velmi vzácná potřeba. Také BigInteger stále by to nepřerušilo od NUMBER může mít kladné a záporné nekonečno.



  1. Funkce zálohovací metody PostgreSQL v AWS S3

  2. Zálohujte PostgreSQL pomocí pg_dump a pg_dumpall

  3. Cross Join v Oracle

  4. Jak mohu vytisknout výsledky dotazů MySQL ve formátu CSV?