UPDATE HR_KQTempForDayCount  
    SET FTIMEA1=(CASE   
       WHEN ITIME1 IS NOT NULL AND OSTTIME_A1 IS NOT NULL 
   AND TO_DATE(Hr_Time48to24(TO_CHAR(KQDATE,'YYYY-MM-DD'),ITIME1),'YYYY-MM-DD HH24:Mi:Ss')>=
       (TO_DATE(Hr_Time48to24(TO_CHAR(KQDATE,'YYYY-MM-DD'),OSTTIME_A1),'YYYY-MM-DD HH24:Mi:Ss')-(STTIME_AN1/24/60))
   AND TO_DATE(Hr_Time48to24(TO_CHAR(KQDATE,'YYYY-MM-DD'),ITIME1),'YYYY-MM-DD HH24:Mi:Ss')<
       TO_DATE(Hr_Time48to24(TO_CHAR(KQDATE,'YYYY-MM-DD'),STTIME_B1),'YYYY-MM-DD HH24:Mi:Ss')-(STTIME_BN1/24/60) THEN ITIME1
   
   WHEN ITIME2 IS NOT NULL AND OSTTIME_A1 IS NOT NULL
   AND TO_DATE(Hr_Time48to24(TO_CHAR(KQDATE,'YYYY-MM-DD'),ITIME2),'YYYY-MM-DD HH24:Mi:Ss')>=
       (TO_DATE(Hr_Time48to24(TO_CHAR(KQDATE,'YYYY-MM-DD'),OSTTIME_A1),'YYYY-MM-DD HH24:Mi:Ss')-(STTIME_AN1/24/60))
   AND TO_DATE(Hr_Time48to24(TO_CHAR(KQDATE,'YYYY-MM-DD'),ITIME2),'YYYY-MM-DD HH24:Mi:Ss')<
       TO_DATE(Hr_Time48to24(TO_CHAR(KQDATE,'YYYY-MM-DD'),STTIME_B1),'YYYY-MM-DD HH24:Mi:Ss')-(STTIME_BN1/24/60) THEN ITIME2
   
   WHEN ITIME3 IS NOT NULL AND OSTTIME_A1 IS NOT NULL
   AND TO_DATE(Hr_Time48to24(TO_CHAR(KQDATE,'YYYY-MM-DD'),ITIME3),'YYYY-MM-DD HH24:Mi:Ss')>=
       (TO_DATE(Hr_Time48to24(TO_CHAR(KQDATE,'YYYY-MM-DD'),OSTTIME_A1),'YYYY-MM-DD HH24:Mi:Ss')-(STTIME_AN1/24/60))
   AND TO_DATE(Hr_Time48to24(TO_CHAR(KQDATE,'YYYY-MM-DD'),ITIME3),'YYYY-MM-DD HH24:Mi:Ss')<
       TO_DATE(Hr_Time48to24(TO_CHAR(KQDATE,'YYYY-MM-DD'),STTIME_B1),'YYYY-MM-DD HH24:Mi:Ss')-(STTIME_BN1/24/60) THEN ITIME3
   
   WHEN ITIME4 IS NOT NULL AND OSTTIME_A1 IS NOT NULL
   AND TO_DATE(Hr_Time48to24(TO_CHAR(KQDATE,'YYYY-MM-DD'),ITIME4),'YYYY-MM-DD HH24:Mi:Ss')>=
       (TO_DATE(Hr_Time48to24(TO_CHAR(KQDATE,'YYYY-MM-DD'),OSTTIME_A1),'YYYY-MM-DD HH24:Mi:Ss')-(STTIME_AN1/24/60))
   AND TO_DATE(Hr_Time48to24(TO_CHAR(KQDATE,'YYYY-MM-DD'),ITIME4),'YYYY-MM-DD HH24:Mi:Ss')<
       TO_DATE(Hr_Time48to24(TO_CHAR(KQDATE,'YYYY-MM-DD'),STTIME_B1),'YYYY-MM-DD HH24:Mi:Ss')-(STTIME_BN1/24/60) THEN ITIME4
   
   WHEN ITIME5 IS NOT NULL AND OSTTIME_A1 IS NOT NULL
   AND TO_DATE(Hr_Time48to24(TO_CHAR(KQDATE,'YYYY-MM-DD'),ITIME5),'YYYY-MM-DD HH24:Mi:Ss')>=
       (TO_DATE(Hr_Time48to24(TO_CHAR(KQDATE,'YYYY-MM-DD'),OSTTIME_A1),'YYYY-MM-DD HH24:Mi:Ss')-(STTIME_AN1/24/60))
   AND TO_DATE(Hr_Time48to24(TO_CHAR(KQDATE,'YYYY-MM-DD'),ITIME5),'YYYY-MM-DD HH24:Mi:Ss')<
       TO_DATE(Hr_Time48to24(TO_CHAR(KQDATE,'YYYY-MM-DD'),STTIME_B1),'YYYY-MM-DD HH24:Mi:Ss')-(STTIME_BN1/24/60) THEN ITIME5
   
   WHEN ITIME6 IS NOT NULL AND OSTTIME_A1 IS NOT NULL
   AND TO_DATE(Hr_Time48to24(TO_CHAR(KQDATE,'YYYY-MM-DD'),ITIME6),'YYYY-MM-DD HH24:Mi:Ss')>=
       (TO_DATE(Hr_Time48to24(TO_CHAR(KQDATE,'YYYY-MM-DD'),OSTTIME_A1),'YYYY-MM-DD HH24:Mi:Ss')-(STTIME_AN1/24/60))
   AND TO_DATE(Hr_Time48to24(TO_CHAR(KQDATE,'YYYY-MM-DD'),ITIME6),'YYYY-MM-DD HH24:Mi:Ss')<
       TO_DATE(Hr_Time48to24(TO_CHAR(KQDATE,'YYYY-MM-DD'),STTIME_B1),'YYYY-MM-DD HH24:Mi:Ss')-(STTIME_BN1/24/60) THEN ITIME6
   
   WHEN ITIME7 IS NOT NULL AND OSTTIME_A1 IS NOT NULL
   AND TO_DATE(Hr_Time48to24(TO_CHAR(KQDATE,'YYYY-MM-DD'),ITIME7),'YYYY-MM-DD HH24:Mi:Ss')>=
       (TO_DATE(Hr_Time48to24(TO_CHAR(KQDATE,'YYYY-MM-DD'),OSTTIME_A1),'YYYY-MM-DD HH24:Mi:Ss')-(STTIME_AN1/24/60))
   AND TO_DATE(Hr_Time48to24(TO_CHAR(KQDATE,'YYYY-MM-DD'),ITIME7),'YYYY-MM-DD HH24:Mi:Ss')<
       TO_DATE(Hr_Time48to24(TO_CHAR(KQDATE,'YYYY-MM-DD'),STTIME_B1),'YYYY-MM-DD HH24:Mi:Ss')-(STTIME_BN1/24/60) THEN ITIME7
   
   WHEN ITIME8 IS NOT NULL AND OSTTIME_A1 IS NOT NULL
   AND TO_DATE(Hr_Time48to24(TO_CHAR(KQDATE,'YYYY-MM-DD'),ITIME8),'YYYY-MM-DD HH24:Mi:Ss')>=
       (TO_DATE(Hr_Time48to24(TO_CHAR(KQDATE,'YYYY-MM-DD'),OSTTIME_A1),'YYYY-MM-DD HH24:Mi:Ss')-(STTIME_AN1/24/60))
   AND TO_DATE(Hr_Time48to24(TO_CHAR(KQDATE,'YYYY-MM-DD'),ITIME8),'YYYY-MM-DD HH24:Mi:Ss')<
       TO_DATE(Hr_Time48to24(TO_CHAR(KQDATE,'YYYY-MM-DD'),STTIME_B1),'YYYY-MM-DD HH24:Mi:Ss')-(STTIME_BN1/24/60) THEN ITIME8
   
   WHEN ITIME9 IS NOT NULL AND OSTTIME_A1 IS NOT NULL
   AND TO_DATE(Hr_Time48to24(TO_CHAR(KQDATE,'YYYY-MM-DD'),ITIME9),'YYYY-MM-DD HH24:Mi:Ss')>=
       (TO_DATE(Hr_Time48to24(TO_CHAR(KQDATE,'YYYY-MM-DD'),OSTTIME_A1),'YYYY-MM-DD HH24:Mi:Ss')-(STTIME_AN1/24/60))
   AND TO_DATE(Hr_Time48to24(TO_CHAR(KQDATE,'YYYY-MM-DD'),ITIME9),'YYYY-MM-DD HH24:Mi:Ss')<
       TO_DATE(Hr_Time48to24(TO_CHAR(KQDATE,'YYYY-MM-DD'),STTIME_B1),'YYYY-MM-DD HH24:Mi:Ss')-(STTIME_BN1/24/60) THEN ITIME9
   
   WHEN ITIME10 IS NOT NULL AND OSTTIME_A1 IS NOT NULL
   AND TO_DATE(Hr_Time48to24(TO_CHAR(KQDATE,'YYYY-MM-DD'),ITIME10),'YYYY-MM-DD HH24:Mi:Ss')>=
       (TO_DATE(Hr_Time48to24(TO_CHAR(KQDATE,'YYYY-MM-DD'),OSTTIME_A1),'YYYY-MM-DD HH24:Mi:Ss')-(STTIME_AN1/24/60))
   AND TO_DATE(Hr_Time48to24(TO_CHAR(KQDATE,'YYYY-MM-DD'),ITIME10),'YYYY-MM-DD HH24:Mi:Ss')<
       TO_DATE(Hr_Time48to24(TO_CHAR(KQDATE,'YYYY-MM-DD'),STTIME_B1),'YYYY-MM-DD HH24:Mi:Ss')-(STTIME_BN1/24/60) THEN ITIME10
  END )
  WHERE  OSTTIME_A1 IS NOT NULL AND STTIME_ADDYN1='Y' AND  NCLASS>0
  ;像这样写法是不是速度比较慢???有高手指点一下,用哪种方法可以代替这种方法!!谢谢
这里主要是用case ;分别用itime1..itime10与某个范围进行比较.

解决方案 »

  1.   


    IT技术挺全的,不错,鼓励一下:http://www.ciitc.com
      

  2.   

    有谁明白oracle执行SQL机制吗?
    它和SQLSERVER2000执行的SQL机制是一样的吗?比如:
       WHEN ITIME1 IS NOT NULL AND OSTTIME_A1 IS NOT NULL  
            AND TO_DATE(Hr_Time48to24(TO_CHAR(KQDATE,'YYYY-MM-DD'),ITIME1),'YYYY-MM-DD HH24:Mi:Ss')>= (TO_DATE(Hr_Time48to24(TO_CHAR(KQDATE,'YYYY-MM-DD'),OSTTIME_A1),'YYYY-MM-DD HH24:Mi:Ss')-  (STTIME_AN1/24/60)) 
    条件一:ITIME1 IS NOT NULL 
    条件二:OSTTIME_A1 IS NOT NULL 
    条件三:TO_DATE(Hr_Time48to24(TO_CHAR(KQDATE,'YYYY-MM-DD'),ITIME1),'YYYY-MM-DD HH24:Mi:Ss')>= (TO_DATE(Hr_Time48to24(TO_CHAR(KQDATE,'YYYY-MM-DD'),OSTTIME_A1),'YYYY-MM-DD HH24:Mi:Ss')-  (STTIME_AN1/24/60))在 oracle执行SQL顺序是不是先条件三,条件二,再条件一???
    还是倒回来??
      

  3.   

    会慢的
    为什么不用程序或存储过程得出要更新的值,一个sql不见得就好
      

  4.   

    条件判断,至少10g是从左到右
    ,既然外围的条件已经包含了 OSTTIME_A1 IS NOT NULL ,则内层就不要再加这个,浪费CPU.
    至于其它的方式,最直接的就是条件分解,但是要考虑分解之后的成本(这和你的数据库设计是密切相关的)