OCI_Connection *conn_put1 = (OCI_Connection *)dbp->dbenv->app_private;OCI_Statement *st2;st2 = OCI_StatementCreate(conn_put1);if(dbp->dbenv->reginfo){
sprintf(sql,"update %s set data = empty_blob() where key = '%s' and itemcode = '%s' returning data into :data",table_view,(char*)key->data,dbp->dbenv->reginfo);

}else{
sprintf(sql,"insert into %s(key,data) values('%s',empty_blob()) returning data into :data",table_view,(char*)key->data);
}
lock();

OCI_Prepare(st2, sql);OCI_RegisterLob(st2,MT(":data"),OCI_BLOB);OCI_Execute(st2);unlock();
rs_put1 = OCI_GetResultset(st2);// print resultset content /
while (OCI_FetchNext(rs_put1))
{
lob_put1  = OCI_GetLob(rs_put1, 1); OCI_LobWrite(lob_put1, (char*)data->data, data->size);}OCI_ReleaseResultsets(st2);OCI_StatementFree(st2);
以上函数是我工程中截取的一部分
所有语句都是可用的
在我进行单人操作时可以插入数据进去
但是一旦是多人同时操作时
lock()和unlock()函数就会导致我的工程死锁
死锁就是在下面这三句操作时
OCI_Prepare(st2, sql);OCI_RegisterLob(st2,MT(":data"),OCI_BLOB);OCI_Execute(st2);如果哪位大侠知道如何解决或者还有疑问
在线等候解答和提供解释