SQL error: Missing keyword?

删除回忆录丶 提交于 2019-12-12 02:43:09

问题


I'm getting a missing keyword error here. I recently added the WHERE clause and that's when the missing keyword error came up.

 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)

Any help would be appreciated.


回答1:


Do it in this way:

....
....
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 



回答2:


You must slightly modify your CASE to return a value:

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


来源:https://stackoverflow.com/questions/30941635/sql-error-missing-keyword

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!