我们面临以增量方式访问Oracle行的问题,表模式是 –
myTable(UniqueNum,flag)
UniqueNum是一个数字不重复的字段,flag是默认值为F的字段.
我的编程步骤是:
>获取UniqueNum,其中标志为F.
select min(UniquaNum)
from myTable
where flag='F';
>执行操作.
一些操作(comport上的通信)
>将标志设置为T.
Update myTable
set flag='T'
where flag='F'
and UniqueNum= 'UN'
我开发了一个执行这些步骤的exe(Delphi-7).当exe同时在多台PC上运行时会出现问题.许多exe获取相同的UniqueNum(步骤1),但只有其中一个exe可以执行所有3个步骤.
假设PC1选择13并执行步骤2,此时PC2执行步骤1然后它也将获取13.然后我的步骤3将因PC2而失败.
我想知道的是,是否有一些机制可以避免这种类型的提取(行锁或表锁)?
任何人都可以建议更好的解决方案,以避免这种并发?如何在Delphi或C#中实现相同的功能?
最佳答案 在第1步中,您需要执行“select .. for update nowait”.您必须检查查询是否成功并采取相应措施.