如何使用Oracle oci动态获取utf8值?

时间:2019-03-20 12:22:47

标签: sql c oracle oci

当我在oci中动态获取utf8值时,OCIStmtFetch2返回负数  作为len,但我不知道负面含义是什么,我该如何获取utf8值动态值?

我的代码是:

    for(;OCI_NEED_DATA == ret_oci;){
        ret_oci=OCIStmtGetPieceInfo(conn->stmt,conn->err,(void**)&defnp,&dtype,(ub1*)&utmp,&utmp,&utmp,&up);
        oci_checkerr(conn->err,ret_oci);
        len_tmp=2;
        if(tmpl!=(long)defnp){ //next column
            tmpl=(long)defnp;
            pa->topData = pa->topData - (pAH->maxLen-pAH->len);
            pAH->maxLen=pAH->len;
            // malloc buffer
            pAH=arrayDataAppend(pa,-1,NULL,len_tmp,TYPE_RAW);
            pTmp = (char*)(pAH+1);
        }else{// current column need more buffer size
            // malloc buffer
            pAH=arrayDataAppend(pa,-2,NULL,len_tmp,TYPE_RAW);
            pTmp = (char*)(pAH+1)+pAH->len;
        }

        ret_oci=OCIStmtSetPieceInfo((void*)defnp,dtype,conn->err,pTmp,&len_tmp,up,NULL,NULL);
        oci_checkerr(conn->err,ret_oci);
        ret_oci=OCIStmtFetch2(conn->stmt, conn->err, 1,OCI_DEFAULT,0,OCI_DYNAMIC_FETCH);
        printf("len_tmp:%d\n",len_tmp);
        itmp = len_tmp;
        oci_checkerr(conn->err,ret_oci);
        //pTmp[itmp]=0;
        pAH->len+=itmp;
    }

值为utf8字符“陈浩”,

运行:

设置len_tmp = 2时;

Error - OCI_NEED_DATA
len_tmp:2
Error - OCI_NEED_DATA
len_tmp:2
Error - OCI_NEED_DATA
len_tmp:-4
Error - OCI_STILL_EXECUTE
epoll wait fd:17 to read..
Error - OCI_NODATA
fetch result,rows:1 :cols:1
        1:陈�, 

设置len_tmp = 3时;

Error - OCI_NEED_DATA
len_tmp:3
Error - OCI_NEED_DATA
len_tmp:3
Error - OCI_STILL_EXECUTE
epoll wait fd:17 to read..
Error - OCI_NODATA
fetch result,rows:1 :cols:1
        1:陈浩, 

设置len_tmp = 5时;

Error - OCI_NEED_DATA
len_tmp:5
Error - OCI_NEED_DATA
len_tmp:-5
Error - OCI_STILL_EXECUTE
epoll wait fd:17 to read..
Error - OCI_NODATA
fetch result,row:1 :cols:1
        1:陈��, 

设置len_tmp = 8时

Error - OCI_NEED_DATA
len_tmp:6
Error - OCI_STILL_EXECUTE
epoll wait fd:17 to read..
Error - OCI_NODATA
fetch result,rows:1 :cols:1
        1:陈浩, 

当值为ascii char'123456782011'时,它没有问题:

设置len_tmp = 5时;

Error - OCI_NEED_DATA
len_tmp:5
Error - OCI_NEED_DATA
len_tmp:5
Error - OCI_NEED_DATA
len_tmp:2
Error - OCI_STILL_EXECUTE
epoll wait fd:17 to read..
Error - OCI_NODATA
fetch result,rows:1 :cols:1
        1:123456782011, 

0 个答案:

没有答案
相关问题