когда я DYNAMIC извлекаю значение utf8 в oci, OCIStmtFetch2 возвращает отрицательное число в виде len, но я не знаю, что означает отрицательное значение, как я могу получить значение utf8 DYNAMIC?
мой код:
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 char "陈浩",
run:
при установке 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,