Oracle 10g: CASE в инструкции select (ошибка ORA-00936)

Я выполняю этот оператор в Oracle 10g.

     select CASE Math WHEN BETWEEN 90 AND 100 THEN 'A'
                      WHEN BETWEEN 80 AND 90  THEN 'B'
                      WHEN BETWEEN 0  AND 80  THEN 'C'
                      ELSE 'Invalid score' END
       from score

Но я получаю следующую ошибку

ORA-00936: отсутствует выражение

Может ли кто-нибудь помочь в том, что мне не хватает?


person somnathchakrabarti    schedule 21.02.2012    source источник


Ответы (2)


В операторе SQL оператор CASE должен быть чем-то вроде

SELECT CASE WHEN math BETWEEN 90 AND 100 
            THEN 'A'
            WHEN math BETWEEN 80 AND 90
            THEN 'B'
            WHEN math BETWEEN 0 AND 80
            THEN 'C'
            ELSE 'Invalid Score'
         END
  FROM score

Синтаксис CASE variable WHEN допустим в PL/SQL, но не в SQL.

person Justin Cave    schedule 21.02.2012

Вместо использования условия я бы сделал это:

 select CASE WHEN math BETWEEN 90 AND 100 THEN 'A'
                      WHEN math BETWEEN 80 AND 90  THEN 'B'
                      WHEN math BETWEEN 0  AND 80  THEN 'C'
                      ELSE 'Invalid score' END
       from score

Я не думаю, что Oracle нравится функция BETWEEN без предшествующей переменной.

person northpole    schedule 21.02.2012
comment
Нет, это заняло промежутки, как упоминал Джастин. Спасибо северный полюс! - person somnathchakrabarti; 21.02.2012
comment
да, похоже, у нас с Джастином одинаковое решение. Ваше здоровье! - person northpole; 21.02.2012