私は、NHibernate プロジェクトで Oracle の整数列にマッピングするために が使用されている例をいくつか見てきましたdecimal
。現在、私はプログラムでint
と を使用しています。long
/decimal
よりもの利点は何ですか? パフォーマンスは向上しますか?int
long
ベストアンサー1
さまざまな例でint/longの代わりにdecimalが使われているのを見ました。なぜなのか理解したいだけです
それはおそらく.NETdecimal
とOracleNUMBER
地図が少し良くなったより柔軟性long
もNUMBER
高まります。後から規模Oracle 列で をすでに使用している場合は、データ型を変更する必要はありませんdecimal
。
decimal
後者の 2 つはハードウェアでサポートされているため、は やint
よりも確かに低速です。とはいえ、違いを生むには、かなりの量のデータを処理する必要があります。それでも、処理対象がそれである場合は を使用し、テーブル列定義でそれを表現するようにするべきだと思います。forなど。long
long
NUMBER(18,0)
long
decimal
マップが少し優れている理由は、 long
64 ビットであり、decimal
(ある意味) 128 ビットであるためです。
。ネット
タイプ:小数点
おおよその範囲: ±1.0 × 10^−28 ~ ±7.9 × 10^28
精度: 有効桁数 28~29 桁タイプ:長さ
範囲: –9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807
精度: 18 桁 (ulong の場合は 19 桁)
オラクル
NUMBER
デフォルト有効桁数は 38 桁、スケールは 0 (整数) です。
タイプ:番号
範囲: +- 1 x 10^-130 ~ 9.99...9 x 10^125
精度: 有効桁数 38 桁
マイクロソフトはこの問題を認識しており、ノート
このデータ型は NUMBER(38) データ型の別名であり、OracleDataReader が整数値ではなく System.Decimal または OracleNumber を返すように設計されています。.NET Framework データ型を使用すると、オーバーフローが発生する可能性があります。
考えてみれば、実際に必要なのはBigInteger
デフォルトと同じ有効桁数を表現できるようにするNUMBER
。これを行っている人を見たことがありませんし、非常にまれなニーズだと思います。また、正の無限大と負の無限大になる可能性があるBigInteger
ため、それでも不十分です。NUMBER