select * from tab for update

解决方案 »

  1.   

    oracle会自动进行,不需手工做。
      

  2.   

    lock table tablename in exclusive mode nowait;
      

  3.   

    事务结束(commit/rollback)就解锁
      

  4.   

    rollback 是解琐命令么,不是事务回滚命令呀
      

  5.   

    (
     begindate in  Date,enddate in date,ret out int
    )
    as
     begin
      aa(begindate,enddate);
      lock table test1 in exclusive mode nowait;
      insert into test1
      select a.hospitalid,count(a.hospitalid) from 
        test a,DB_Optionvalue B,DB_DateValue c
        ,CareInfo D
       where  B.OPTIONVALUEHEALTHCODE=C.DATEVALUEHEALTHCODE
       AND B.OPTIONVALUEHEALTHCODE=D.CAREINFOHEALTHCODE
       AND A.HOSPITALID=B.OPTIONVALUEHOSPITAL
       AND B.OPTIONELEMENTVALUE=399
       AND B.OVALUE=217
       GROUP BY A.Hospitalid;
       commit;
       rollback;
     end;上面的这段写法可以对TEST1表里做锁处理么,处理正确么
      

  6.   

    commit;或者rollback之前执行向insert这样的语句时,oracle会自动给表加锁,这时候除了select语句,其他的像删除、插入之类的语句(在其他会话中)执行时会被挂起,等待该表解锁。一旦commit或者rollback,表就解锁了
      

  7.   

    上面的这段代码可以对表进行锁处理,在你insert结束之后,commit执行,lock自动解除,这个时候,你的语句中的rollback就没有实际意义,建议删除。