さまざまな例で、int/longの代わりにdecimalが使用されているのを見てきました。理由を理解しようとしているだけです
これはおそらく、.NET decimalが原因です。 およびOracleNUMBER longよりも少し良いマップ およびNUMBER また、柔軟性も向上します。後の段階でスケールを追加する場合 Oracle列で、すでにdecimalを使用している場合は、データ型を変更する必要はありません。 。
decimal 確かにintよりも遅いです およびlong 後の2つはハードウェアでサポートされているためです。とは言うものの、違いを生むには、かなりの量のデータを処理する必要があります。私はまだlongを使うべきだと思います それがあなたが扱っているものであるなら、あなたはまた、テーブルの列の定義がそれを表すようにするべきです。 NUMBER(18,0) longの場合 など。
decimalの理由 マップが少し良くなるのは、long 64ビットでdecimal は(種類の)128ビットです。
.NET
タイプ:10進数
おおよその範囲:±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桁
Microsoftは問題と注意事項を認識しています
このデータ型はNUMBER(38)データ型のエイリアスであり、OracleDataReaderが整数値ではなくSystem.DecimalまたはOracleNumberを返すように設計されています。 .NETFrameworkデータ型を使用すると、オーバーフローが発生する可能性があります。
考えてみると、実際にはBigIntegerが必要です。 NUMBERと同じ有効桁数を表すことができるようにする デフォルトはです。私は誰もそれをするのを見たことがありません、そして私はそれが非常にまれな必要性であると思います。また、BigInteger NUMBER以来、まだカットされません 正と負の無限大にすることができます。