Oracle OCI OCIStmtFetch2调用失败,并显示SQLT_TIMESTAMP

时间:2019-08-09 11:39:33

标签: oci

OCIStmtFetch2下面的代码中,如果列类型是SQLT_TIMESTAMP或SQLT_TIMESTAMP_TZ或SQLT_TIMESTAMP_LTZ,则函数引发异常:

OCIEnv* env;
OCIError* err;
OCISvcCtx* svc;
OCIStmt* stmt; 
OCIDateTime* dt;

…

std::string query = "SELECT LAST_UPDATE_TIME FROM V$SUBSCR_REGISTRATION_STATS" ;
if (OCIHandleAlloc(env, (void**)&stmt, OCI_HTYPE_STMT) != OCI_SUCCESS)
    return;
if (OCIStmtPrepare2(svc, &stmt, err, query.data(), query.size(), nullptr, 0, OCI_NTV_SYNTAX, OCI_DEFAULT) != OCI_SUCCESS)
    return;
if (OCIStmtExecute(svc, stmt, err, 0, 0, nullptr, nullptr, OCI_DEFAULT) != OCI_SUCCESS)
    return;
if (OCIDescriptorAlloc(env, err, (void**)&dt, OCI_DTYPE_TIMESTAMP, 0, nullptr) != OCI_SUCCESS)
    return;
if (OCIDefineByPos(stmt, def, err, index, dt, sizeof(OCIDateTime*), SQLT_TIMESTAMP, &ind, nullptr, nullptr, OCI_DEFAULT) != OCI_SUCCESS)
    return;
if (OCIStmtFetch2(stmt, err, 1, OCI_FETCH_NEXT, 0, OCI_DEFAULT) != OCI_SUCCESS)   // <- exception
    return;

是什么原因造成的?

0 个答案:

没有答案