我有数据表tb_a, tb_b 其中表tb_b含有字段b1,b2,b3 
现在我在同一个事务中执行以下语句设定为事务1
insert into tb_b
from (select * from tb_a where clr_date='20090101');
DECLARE cursor01 CURSOR for 
select b2,b3
from tb_b
order by b2,b3;OPEN cursor01;
while (1)
{
  FETCH cursor01
    into :b2, :b3;  update tb_b
    set b1 = :a
    where b2 = :b2
    and b3 = :b3;
}在以上程序执行到循环update的同时,我的另一个事务2中在不断的向表tb_a中插入新的记录 
我想请问各位专家:1、我的事务1是否要等到事务2全部执行完成后,才能执行;
2、事务2的运行对于我事务1中已经运行的insert语句的结果是否照成影响

解决方案 »

  1.   

    1、我的事务1是否要等到事务2全部执行完成后,才能执行; 
    不用,一个是insert事务,一个是update事务
    2、事务2的运行对于我事务1中已经运行的insert语句的结果是否照成影响
    不影响;因为已经打开了游标;
    事务具有隔离性,
    当一个用户执行update语句时,就把当前的记录锁起来,另一个用户不能对当前记录进行修改;
      

  2.   

    两个问题都是关于事务的。
    参考一下,对事务的理解有帮助。
    http://hi.baidu.com/jdsnhan/blog/item/351f3cf42458e0def2d385cc.html
      

  3.   

    首先,你的PL/SQL代码有语法错误。
    其次,对于“事务2的运行对于我事务1中已经运行的insert语句的结果是否照成影响”,是不会有影响的,游标操作只会对当前的结果集进行,与其他的记录行无关。