有一个过程对一个表insert,可能时间很长,这时如果另一个用户要对表进行update操作时,好象要等到先前的过程执行完毕后,才能对表进行update,请问有方法让两个用户同时修改同一个表吗?谢谢

解决方案 »

  1.   

    需要使用时间戳.
    insert into tbl() valeus(....,sysdate)update tbl 
     where u_date > sysdate
      

  2.   

    时间戳???能说详细  点吗?
    -- 就是在表中增加一个时间字段,用于存放insert时的时间.
       其他用户只需根据这个字段,来判断是否是否进行update.
      

  3.   

    但现在我测试时发现只要我的过程在运行,别的用户就不能执行修改的操作,好象是oracle把整个表lock了啊!!!oracle默认的是可以多个人同时修改同一个表吗?
      

  4.   

    insert 1条就 commit 1条记录.
    不要等到全部 insert 完,再commit.
      

  5.   

    但我的过程是在trigger中调用的,不能commit啊!!!
      

  6.   

    但我的过程是在trigger中调用的,不能commit啊!!!
    --你都没有commit,别人怎么update?
      

  7.   

    但是连以前的都不能update了,现在只要想办法能够update以前的data
      

  8.   

    那可能过程中加锁了,如: select * from tbl for update
      

  9.   

    没有啊,我的是insert,另一个用户要update
      

  10.   

    在insert,update,delete的时候,系统好象会把表暂时锁定,.等待操作执行后或取消操作才可以进行下一个DML的操作,
      

  11.   

    最好不用触发器,虽说省事,可效率并不是很高,而且容易使数据库系统崩溃.个人建议改用程序处理,以共享方式打开表,这样不会影响他人的操作(Update,delete)!
      

  12.   

    同意tang800710意见。
    触发器尽量做少一点、更独立一点的工作。
      

  13.   

    肯定是你程序的问题,或者数据库初始化参数有问题oracle的行锁保证只要两个会话不同时修改同一行数据,就不会发生等待(阻塞)。你所描述的现象在sqlserver中很常见