你的语句都写的有问题,当然没有反应了,请把update的字查询加入限定。具体应用这样吧
Update T_TEMP_STOCKCTRL  set FSALEQTY0 = (
       select  sum(ogb12) 
          from oga_file ,ogb_file ,ima_file 
        where oga01 = ogb01     and ogb04 = ima01 
              and substr(ogb09,0,5) = fwhno 
              and ima140 = fbrand and ima02 = fgrade
              and T_TEMP_STOCKCTRL.ima140=ima140 and ima02 = T_TEMP_STOCKCTRL.ima02 and ... ) 
也就是对于T_TEMP_STOCKCTRL的每一行都需要从子查询中查出相应的记录

解决方案 »

  1.   

    谢谢你的回答,Update的写法实际为:
      Update T_TEMP_STOCKCTRL  set FSALEQTY0 = (
           select  sum(ogb12) 
              from oga_file aa ,ogb_file bb  ,ima_file cc
            where aa.oga01 = bb.ogb01     and bb.ogb04 = cc.ima01 
                  and substr(bb.ogb09,0,5) = T_TEMP_STOCKCTRL.fwhno 
                  and cc.ima140 = T_TEMP_STOCKCTRL.fbrand and cc.ima02 = T_TEMP_STOCKCTRL.fgrade
                  Group by cc.ima140, cc.ima02  , substr(bb.ogb09,0,5) ) 
    跟你说的一样啊,没有放应可能是速度奇慢,但是对应的查询只需要3秒种。请问两个SQL语句不一样吗?Update语句有错误吗?谢谢拉。
      

  2.   

    果然!四分钟出来了!但是对应的select语句只需要3秒,为什么,谢谢.
      

  3.   

    select  sum(ogb12) 
              from oga_file aa ,ogb_file bb  ,ima_file cc , T_TEMP_STOCKCTRL
            where aa.oga01 = bb.ogb01     and bb.ogb04 = cc.ima01 
                  and substr(bb.ogb09,0,5) = T_TEMP_STOCKCTRL.fwhno 
                  and cc.ima140 = T_TEMP_STOCKCTRL.fbrand and cc.ima02 = T_TEMP_STOCKCTRL.fgrade
                  Group by cc.ima140, cc.ima02  , substr(bb.ogb09,0,5)
    这个速度很快,只要3秒,如何优化Update语句?谢谢
      

  4.   

    查询只需要3秒是因为数据只进行了一次汇总查询,update语句执行的时间长是因为每更新一条记录,数据都要进行一次汇总查询,要update的记录越多,需要的查询次数越多,时间也越慢可以考虑改用游标来进行update操作
      

  5.   

    呵呵..代码的数据处理量可是很不一样的..
    update进行小量数据的处理还可以..
    大一点的数据就与一般查询很明显的有差别,这时可以考虑生成新的表,或者你把系统的缓冲区加大,让命中率能达到99%,这样update 就会快一些.
      

  6.   

    shotking(小金)的说法比较合理,我觉得也是用过程干快点
      

  7.   

    使用存储过程吧,那比较 快一些,同时你的SQL语句需要优化一下。
      

  8.   

    呵呵,那样都不快。有一个很笨的方法:建一个全局的 on commit delete rows的临时表,存放结果,在将结果更新要更新的表,这样速度快,避免了多次查询的问题。
    不知道一条SQL能够达到上面的效果?据说用Exist可以,哪位高手能解决?