2015-06-19 6 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

Я думаю, что оператор CASE в предложении WHERE не разрешен. Попробуйте использовать 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 
Смежные вопросы