2015-06-19 85 views
0

我在这里收到关键字错误。我最近添加了WHERE子句,这是缺少关键字错误时出现的。SQL错误:缺少关键字?

Select job_id, 
     (Case :P1_DATE_CHOOSER 
      WHEN 'Daily' THEN trunc(start_time) 
      WHEN 'Weekly' THEN trunc(start_time, 'WW') 
      WHEN 'Monthly' THEN trunc(start_time, 'MM') 
     END) "START_DATE", 
     1440*(END_TIME - START_TIME) "RUN_TIME" 
from NI_INFA_ACTIVITY_LOG_V 


WHERE 


(Case :P1_JOB_SIZE_CHOOSER 
WHEN 'Small' THEN (1440*(END_TIME - START_TIME)) <= 5 
WHEN 'Medium' THEN (1440*(END_TIME - START_TIME)) > 5 AND 
       (1440*(END_TIME - START_TIME)) <= 20 
WHEN 'Large' THEN (1440*(END_TIME - START_TIME)) > 20 
Else (1440*(END_TIME - START_TIME)) > 0 
END) 

任何帮助,将不胜感激。

+0

你能描述你的桌子吗? – Cyrbil

+0

我认为WHERE子句中的CASE语句是不允许的。尝试使用DECODE。 – NoGotnu

回答

1

就做了这种方式:

.... 
.... 
WHERE 
:P1_JOB_SIZE_CHOOSER = 'Small' AND (1440*(END_TIME - START_TIME)) <= 5 
OR 
:P1_JOB_SIZE_CHOOSER = 'Medium' AND (1440*(END_TIME - START_TIME)) > 5 AND 
       (1440*(END_TIME - START_TIME)) <= 20 
OR 
:P1_JOB_SIZE_CHOOSER = 'Large' AND ((1440*(END_TIME - START_TIME)) > 20 
OR 
:P1_JOB_SIZE_CHOOSER NOT IN('Small','Medium','Large') AND (1440*(END_TIME - START_TIME)) > 0 
+0

工作!谢谢! – Philab

0

您必须稍微修改您的情况下返回值:

WHERE 
    Case 
    WHEN :P1_JOB_SIZE_CHOOSER = 'Small' AND (1440*(END_TIME - START_TIME)) <= 5 
     THEN 1 
    WHEN :P1_JOB_SIZE_CHOOSER = 'Medium' AND (1440*(END_TIME - START_TIME)) > 5 
             AND (1440*(END_TIME - START_TIME)) <= 20 
     THEN 1 
    WHEN :P1_JOB_SIZE_CHOOSER = 'Large' AND (1440*(END_TIME - START_TIME)) > 20 
     THEN 1 
    WHEN (1440*(END_TIME - START_TIME)) > 0 
     THEN 1 
    END = 1