OCI 批量处理BLOB locator问题。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
bool update_blob(BLOBPIC **blobsub, OCILobLocator **blob)
{
text *update = (text *)"SELECT pic FROM blobpic WHERE pid = :1 FOR UPDATE";
OCIBind *bndhp1 = NULL;
OCIDefine *defhp1 = NULL;
sb4 status = 0;
bool ersign = 1;
BLOBPIC *tempid = NULL; //用来临时保存PID
//tempid = blobsub->pid;
//prepare to update
ersign = ersign & CheckErr(errhp, OCIStmtPrepare(stmthp, errhp, (oratext *)update, (sb4)strlen((char *)update), OCI_NTV_SYNTAX, OCI_DEFAULT));
ersign = ersign & CheckErr(errhp, OCIBindByPos(stmthp, &bndhp1, errhp, 1, blobsub[0]->pid,(sb4)sizeof(blobsub[0]->pid), SQLT_INT,&blobsub[0]->indic, &blobsub[0]->alen, &blobsub[0]->rcodep, MAXPICNUM, &blobsub[0]->curelp, OCI_DEFAULT));
OCIBindArrayOfStruct(bndhp1, errhp, sizeof(blobsub[0]->pid), sizeof(sb2), sizeof(ub2), sizeof(ub2), sizeof(ub2)); //批量处理
ersign = ersign & CheckErr(errhp, OCIDefineByPos(stmthp, &defhp1, errhp, 1, (void *)blob[0], (sb4)sizeof(blob[0]), SQLT_BLOB, 0, 0, 0, OCI_DEFAULT));
OCIDefineArrayOfStruct(defhp1, errhp, sizeof(blob),sizeof(sb2), sizeof(ub2), sizeof(ub2));
//update
status = OCIStmtExecute(svchp, stmthp, errhp, MAXPICNUM, 0, NULL, NULL, OCI_DEFAULT);
if(status && status != OCI_SUCCESS_WITH_INFO) //出错则返回
{
CheckErr(errhp, status);
OCIHandleFree((dvoid *)envhp, OCI_HTYPE_ENV);
return FALSE;
}
return ersign;
}
运行时出现"编译绑定长度不同于执行绑定长度"的错误代码
MAXPICNUM 为3
是不是哪儿的参数错了?
OCIBindByPos()的最后那几个指针是否必须为指针?数组可以么?alenp 与indp rcodep maxarr_len curelep 他们都必须要设置么?
谢谢!!