在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;
是什么原因造成的?