NHibernate で NUMBER Oracle データ型をマッピングするのに最適な .NET データ型はどれですか? 質問する

NHibernate で NUMBER Oracle データ型をマッピングするのに最適な .NET データ型はどれですか? 質問する

私は、NHibernate プロジェクトで Oracle の整数列にマッピングするために が使用されている例をいくつか見てきましたdecimal。現在、私はプログラムでintと を使用しています。long

/decimalよりもの利点は何ですか? パフォーマンスは向上しますか?intlong

ベストアンサー1

さまざまな例でint/longの代わりにdecimalが使われているのを見ました。なぜなのか理解したいだけです

それはおそらく.NETdecimalとOracleNUMBER 地図が少し良くなったより柔軟性longNUMBER高まります。後から規模Oracle 列で をすでに使用している場合は、データ型を変更する必要はありませんdecimal

decimal後者の 2 つはハードウェアでサポートされているため、は やintよりも確かに低速です。とはいえ、違いを生むには、かなりの量のデータを処理する必要があります。それでも、処理対象がそれである場合は を使用し、テーブル列定義でそれを表現するようにするべきだと思います。forなど。longlongNUMBER(18,0)long

decimalマップが少し優れている理由は、 long64 ビットであり、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

おすすめ記事