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

oracle事务操作的问题
我一个存储过程中,要先查询一个表,然后根据结果做出相应操作,比如:

select xx from table T
if (no record) then
insert xxx to T
else
do something else
commit


当这个存储过程被连续快速调用2次时,第一次的调用事务还没有结束,而第二次调用已经开始,所以查到表T里没有记录,所以会执行insert操作,这个是我所不希望的。

我希望严格的控制,当第一次事务还没有结束时,insert操作对表T加锁,这个时候任何其他事务都不能查询,必须等待到第一次事务结束为止。

不知道有没有办法实现?



------解决方案--------------------
SQL code

lock table t in exclusive mode;
--在你的select xx from table t前加句
update t set xx=xx where 1=2;
select xx from table T;