Oracle OCI ライブラリを使用して C++ ライブラリを開発しています。Oracle Database 11g データベースからロードしています。ここでは、小数点以下の桁数のある大きな値をロードする必要があります。この場合、double ではなく long double を使用する必要があります。OCI が long double をサポートしているかどうかはわかりません。
ドキュメントによると、SQLT_FLT は float と double のみを対象としています。OCIがlong doubleをサポートしているかどうか、サポートしている場合はそれらを取得する方法を誰かに教えてもらえますか
1 に答える
1
はいといいえ。
floatに関するサーバーのドキュメントによると、「ネイティブ」C型は最大倍精度(BINARY_DOUBLE
)をサポートします。ただし、NUMBERタイプは以下を格納できます。
- 1 x 10-130〜9.99 ... 9 x 10125の範囲の正の数(有効数字38桁まで)
- -1x10-130から9.99...99 x 10125までの負の数(有効数字38桁まで)
long double
これは、x86/amd64よりも精度が高くなります。
したがって、の代わりにそのタイプを使用する必要がありますBINARY_*
。悲しいことに、開発者のドキュメントは次のように述べています。
NUMBER
外部データ型として使用する必要はありません。これを使用する場合、Oracleは内部の21バイトのバイナリ形式で数値を返し、入力時にこの形式を期待します。以下の説明は、完全を期すためにのみ含まれています。
一方、次のドキュメントもあります。
- OCINumberタイプを使用します。
- OCINUMBER関数。
AFAICS OCINumberFromReal ()long double
は;をサポートします。さらに精度が必要な場合は、10進文字列でOCINumberFromText()を使用できます。
于 2012-08-28T10:01:25.593 に答える