【发布时间】:2020-07-09 06:38:26
【问题描述】:
我正在使用 C++ 中的 ODPI-C 从 oracle 数据库中获取一行,而 NUMBER(19,0) 类型似乎是双倍的,因此在某些情况下,字段值已损坏(例如,在 db viewer 中显示 5187413295700 304461 但是在 fetch 之后它变成了 5.1874132957002998e+18 这不太正确)。
读取字段值由
完成int dpiStmt_getQueryValue(dpiStmt *stmt, uint32_t pos, dpiNativeTypeNum *nativeTypeNum, dpiData **data);
其中返回参数dpiNativeTypeNum nativeTypeNum设置为DPI_ORACLE_TYPE_NUMBER
dpiQueryInfo info的返回参数
int dpiStmt_getQueryInfo(dpiStmt *stmt, uint32_t pos, dpiQueryInfo *info);
function 表示该字段应该被读取为Double。
更新
我不确定,但在 OCI(其中包装器是 ODPI-C)中有一个名为 OCINumberToText 的函数。我想这种功能是我需要的。
还有一个类 ResultSet,它有一个名为 getString(unsigned int colIndex) 的成员函数,它完全符合我的需要(将 NUMBER(19,0) 转换为 std::string)。
更新 2
我找到了一个名为 dpiDataTypeInfo.ociTypeCode 的成员字段,其中包含注释“指定数据的 OCI 类型代码,如果 ODPI-C 不支持该类型,这将很有用” 从这里 https://oracle.github.io/odpi/doc/structs/dpiDataTypeInfo.html#dpidatatypeinfo
但是如何使用它来调用 OCI 函数呢?
【问题讨论】:
-
询问 ODPI-C 问题的最佳地点是github.com/oracle/odpi/issues
标签: c oracle oracle-call-interface odpi-c