sql >> データベース >  >> RDS >> Oracle

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

    さまざまな例で、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以来、まだカットされません 正と負の無限大にすることができます。



    1. DATETIME列のランダム値

    2. ユーザーのすべてのアクティブおよび非アクティブなOracleセッションを強制終了する方法

    3. SQLServerのID列の増分値を返します

    4. アプリケーションの新しいバージョンを更新するときにsqliteデータベースを削除します