5

NET (c#) でこの単純な SQL クエリの結果を取得しようとしたときに発生する問題に直面しています。

select 1/3 as col from dual

OracleDataReader.GetValue(i)例外をスローします:

Arithmetic operation resulted in an overflow.
at Oracle.DataAccess.Types.DecimalConv.GetDecimal(IntPtr numCtx)
at Oracle.DataAccess.Client.OracleDataReader.GetDecimal(Int32 i)
at Oracle.DataAccess.Client.OracleDataReader.GetValue(Int32 i)

数値の精度が 28 桁を超えるとこのエラーが発生することがわかったため、エラーが発生します。

select round(1/3,29) as col from dual

しかし、これはしません

select round(1/3,28) as col from dual

C#で列の値をDoubleとして処理しようとすると、「無効なキャスト」というエラーが発生します

数値列のユビキタスな丸めを除いて、この状況を回避する方法を知っている人はいますか?

4

2 に答える 2

2

データ型は 10 進数なので、正確でなければなりません。1/3 無限小数を小数型に格納することはできません。一般に、Single または Double から Decimal への変換では、変換の結果が Decimal として表現できない場合、OverflowException がスローされます。したがって、この値を double として読み取るか、正しい 10 進数であることを確認する必要があります。

于 2012-04-11T10:11:19.943 に答える
0

最初に以下のリンクを確認してください。パッチを追加する必要があるかもしれません。

http://www.chriscolotti.us/vmware/gotcha-upgrading-vcenter-4-1-to-5-0-with-oracle-11gr2-may-need-client-patch/

于 2012-04-11T11:20:30.973 に答える