打印一下错误信息
sb4 errno;
text errbuf[512]; OCIErrorGet((dvoid*)errhp, (ub4)1, NULL, &errno, errbuf, (ub4)sizeof(errbuf), OCI_HTYPE_ERROR);
printf("OCI failed: %s\n", errbuf);

解决方案 »

  1.   

    还有请问你是在linux下面连oracle吗?
      

  2.   

    而且好像是用这几个参数啊 OCIEnv *envhp;
    OCIError *errhp;
    OCIServer *srvhp;
    OCISvcCtx *svchp;
    OCIStmt *stmthp;
    OCIDefine *defhp; error_proc(OCIEnvCreate(&envhp, OCI_DEFAULT, (dvoid*)0, NULL, NULL, NULL, 0, (dvoid **)0));
    if (status) return false;
    error_proc(OCIHandleAlloc((dvoid*)envhp, (dvoid**)&errhp, OCI_HTYPE_ERROR, (size_t)0, (dvoid**)0));
    if (status) return false;
    error_proc(OCIHandleAlloc((dvoid*)envhp, (dvoid**)&srvhp, OCI_HTYPE_SERVER, (size_t)0, (dvoid**)0)); 
    if (status) return false;
    error_proc(OCIHandleAlloc((dvoid*)envhp, (dvoid**)&svchp, OCI_HTYPE_SVCCTX, (size_t)0, (dvoid**)0));
    if (status) return false;
    error_proc(OCIAttrSet((dvoid*)svchp, OCI_HTYPE_SVCCTX, (dvoid*)srvhp, (ub4)0, OCI_ATTR_SERVER, (OCIError*)errhp));
    if (status) return false;
    //*****maybe should allocate before every executement
    error_proc(OCIHandleAlloc((dvoid*)envhp, (dvoid**)&stmthp, OCI_HTYPE_STMT, (size_t)0, (dvoid**)0));
    if (status) return false;