我正在使用 OCI 开发 C++ 应用程序。我需要从数据库中获取数据到 OCINumber。我对如何将 OCIDefineByPos() 函数与 OCINumbers 一起使用感到困惑。有人可以帮我弄这个吗。
下面给出的是我调用 OCIDefineByPos 函数的代码部分。pStmt 是 OCIStmt*,p_Error 是 OCIError*。使用以下函数指针。
1. pf_OCINumberFromReal = function pointer to OCINumberFromReal
2. pf_OCINumberToReal = function pointer to OCINumberToReal
3. pf_DefineByPos = function pointer to OCIDefineByPos.
OCINumber ocinTest;
long double dnum = 0.0;
(*pf_OCINumberFromReal)(p_Error, &dnum, sizeof(dnum), &ocinTest);
int iLength1 = sizeof(ocinTest);
OCIDefine* pDfn = NULL;
iRet = (*pf_DefineByPos)(pStmt, &pDfn, p_Error, 1, (dvoid *) &ocinTest,
(sword) iLength1, SQLT_NUM, (dvoid *) 0, (ub2 *)0,
(ub2 *)0, OCI_DEFAULT);
if (iRet == OCI_SUCCESS)
{
(*pf_OCINumberToReal)(p_Error, &ocinTest, sizeof(dnum), &dnum);
std::cout <<std::fixed << std::setprecision (10) << dnum << std::endl;
}
尽管 iRet = OCI_SUCCESS 它没有正确获取数据库中的值。(使用 pStmt 定义的 sql 查询的值)。即使在通话之后,dnum 也是 0.0。这个 pf_DefineByPos 适用于其他数据类型,例如 int 、double 等。
所以有人可以帮我找到这个问题。