用case这种方法的速度会慢吗??

agtnti12 2008-05-05 04:56:26
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与某个范围进行比较.
...全文
242 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
robin_ares 2008-05-06
  • 打赏
  • 举报
回复
会慢的
为什么不用程序或存储过程得出要更新的值,一个sql不见得就好
dawugui 2008-05-06
  • 打赏
  • 举报
回复
眼花.

自己试试不就知道了.
agtnti12 2008-05-06
  • 打赏
  • 举报
回复
有谁明白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顺序是不是先条件三,条件二,再条件一???
还是倒回来??
oracle_dba_11 2008-05-06
  • 打赏
  • 举报
回复
看的我头晕
niujunkai 2008-05-06
  • 打赏
  • 举报
回复
应该这样写可以的,分开太累了
qiyousyc 2008-05-06
  • 打赏
  • 举报
回复
太长了,没法看
多壮志 2008-05-06
  • 打赏
  • 举报
回复
条件判断,至少10g是从左到右
,既然外围的条件已经包含了 OSTTIME_A1 IS NOT NULL ,则内层就不要再加这个,浪费CPU.
至于其它的方式,最直接的就是条件分解,但是要考虑分解之后的成本(这和你的数据库设计是密切相关的)
玉儿o0 2008-05-05
  • 打赏
  • 举报
回复
总比写十个句子快。。
star_guan2008 2008-05-05
  • 打赏
  • 举报
回复
bs推销的
ciitc2 2008-05-05
  • 打赏
  • 举报
回复

IT技术挺全的,不错,鼓励一下:http://www.ciitc.com
HelloWorld_001 2008-05-05
  • 打赏
  • 举报
回复
就这样写,我的意见!
我还不会优化,纯粹是看到100分来的

表BS我

17,088

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧