c# – 使用Delphi7进行并发控制Oracle

我们面临以增量方式访问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”.您必须检查查询是否成功并采取相应措施.

点赞