我正在使用oracle OCI库开发一个C ++库。我从Oracle Database 11g数据库加载。在这里,我需要加载带小数位的大值。在这种情况下,我需要使用long double而不是double。我不确定OCI是否支持长双 根据文档,SQLT_FLT仅用于float和double。有人能让我知道OCI是否支持长双,如果支持如何检索它们
答案 0 :(得分:1)
是和否。
根据server docs on floats,“原生”C类型支持双精度(BINARY_DOUBLE
)。但是,NUMBER类型可以存储:
- 正数,范围为1 x 10-130至9.99 ... 9 x 10125,最多38位有效数字
- 负数从-1 x 10-130到9.99 ... 99 x 10125,最多38位有效数字
比x86 / amd64上的long double
更精确。
因此,您需要使用该类型而不是BINARY_*
。可悲的是,developer docs说:
您不应该使用
NUMBER
作为外部数据类型。如果您确实使用它,Oracle将以其内部21字节二进制格式返回数值,并期望在输入时使用此格式。以下讨论仅用于完整性。
另一方面,还有文档:
AFAICS OCINumberFromReal()支持long double
;如果你想要更高的精度,那么你可以使用OCINumberFromText()和十进制字符串。