日期:2014-05-17  浏览次数:21114 次

oracle在insert时如何根据count进行插入控制
现在有一个用户参与活动的表,字段包含用户号码,是否中奖两个字段。

select count(1) into v_temp_count from table where gift =1;
if v_temp_count > 1 then--当一等奖已被抽掉,用户不能再中一等奖
    insert into table(phone_number,gift)values(phone,0);--插入用户未中奖记录
end if;


因为服务器是集群的,所以需要在数据库端进行锁操作。但是oracle中查询是不能锁的。
那么如何保证查询count和insert在同一原子操作中呢?!

------解决方案--------------------
你的这个问题应该是这样的吧,把抽中的结果移动到另外一个表,然后删除原表抽中的用户,这两个放在一个事务中。也可以不需要按这个方式来处理,下一轮抽奖的时候,过滤条件gift字段等于0的即参加一下轮抽奖。
------解决方案--------------------


我不明白一个事情,你的代码明明是PL/SQL..为什么存在不是一个原子操作的问题呢?

本身一个BEGIN END就可以是一个事务,不管你是集群还是单机.
------解决方案--------------------
 

线程   事务

事务   线程

挺乱的哦.....