1、用select ... for update nowait;如果锁定出现异常,则在外围捕捉,同时循环加1,试图去锁定下一哥资源。
2、用序列:大并发情况下,不同请求进入函数得到序列号不同来选定不同的数据资源。类似于下面这样的代码
db.SetSQL("select SEQ_SELECT_NUMBER.nextval cur_seq_pos from dual");
db.Open();
db.Next();
iNumSeq = db.GetInt("cur_seq_pos");
snprintf(pszPagedSQL, CIMLenDef::IM_SQL_LEN,
" select * from (select rownum row_num,t1.* from (%s) t1 where rownum<:iMaxCount+1) "
" where row_num=iNumSeq ",
pszSQL);