开发环境:Solaris 10
数据库:Oracle 10g 用PL/SQL管理
开发工具:CC 编译器 OCCI接口部分代码如下:
COracleWrapper *obj = new COracleWrapper(user, passwd, db);string sqlStr = "select * from tableOne where IsActive=1";
string updateStr = "update tableOne set querynow=1 where taskid=5";
while(true)
{
ResultSet* querySet = obj->ExecuteQuery(sqlStr);
while(querySet->next())
{
int stateValue = querySet->getInt(4);
if(stateValue == 1)
{
obj->ExecuteUpdate(updateStr);
}
}
sleep(10000);
obj->ClearQuery(querySet);
sleep(10000);
}
delete (obj);问题:当我用while循环查询某一表某一记录时,这个记录某一字段就不能更新了吗?用PL/SQL更新改记录时,提示记录被另一用户锁住。有什么办法循环查询某一记录时,又能修改改记录某一字段。
数据库:Oracle 10g 用PL/SQL管理
开发工具:CC 编译器 OCCI接口部分代码如下:
COracleWrapper *obj = new COracleWrapper(user, passwd, db);string sqlStr = "select * from tableOne where IsActive=1";
string updateStr = "update tableOne set querynow=1 where taskid=5";
while(true)
{
ResultSet* querySet = obj->ExecuteQuery(sqlStr);
while(querySet->next())
{
int stateValue = querySet->getInt(4);
if(stateValue == 1)
{
obj->ExecuteUpdate(updateStr);
}
}
sleep(10000);
obj->ClearQuery(querySet);
sleep(10000);
}
delete (obj);问题:当我用while循环查询某一表某一记录时,这个记录某一字段就不能更新了吗?用PL/SQL更新改记录时,提示记录被另一用户锁住。有什么办法循环查询某一记录时,又能修改改记录某一字段。
我是想通过while循环不断查询stateValue 字段的值, 当stateValue 值为1时,执行Update,更新querynow值为1。
当我执行该程序后,用PL/SQL修改stateValue 为1,但是querynow为什么没有变化????
你这里是有一个会话对表内若干条数据执行了update操作,而没有提交,该会话占据了这几条记录上的排他锁。导致其他会话尝试dml操作时需要等待
注意及时commit来避免
可以呀。而且oracle实现了一致性读
用PL/SQL更新改记录时,提示记录被另一用户锁住。
这里会不会是你查询了以后,update的语句没有提交导致的。这里提示“提示记录被另一用户锁住”感觉也怪异,应该是停住,知道上个锁释放才是的。