OCI长双

时间:2012-08-28 09:29:53

标签: c++ oracle

我正在使用oracle OCI库开发一个C ++库。我从Oracle Database 11g数据库加载。在这里,我需要加载带小数位的大值。在这种情况下,我需要使用long double而不是double。我不确定OCI是否支持长双 根据文档,SQLT_FLT仅用于float和double。有人能让我知道OCI是否支持长双,如果支持如何检索它们

1 个答案:

答案 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()和十进制字符串。