2015-01-06 3 views
0

Рассмотрим следующий код:Case Выражение метания исключение

Select FLAGS, 
CASE FLAGS 
WHEN 0 THEN "10000000" 
WHEN 1 THEN "01000000" 
WHEN 2 THEN "00100000" 
WHEN 3 THEN "00010000" 
WHEN 4 THEN "00001000" 
WHEN 5 THEN "00000100" 
WHEN 6 THEN "00000010" 
WHEN 7 THEN "00000001" 
ELSE "00000000" 
END AS Test-W 
FROM V_TEST 

Приведенное выше утверждение бросает ошибку как:

ORA-00923: FROM keyword not found where expected 
00923. 00000 - "FROM keyword not found where expected" 
*Cause:  
*Action: Error at Line: 14 Column: 17 

Мое имя таблицы V_TEST, имя столбца FLAGS. Что я здесь делаю неправильно?

+0

выполняет запрос в 'SQL * PLUS' – Exhausted

ответ

2

использование апостроф `для буквальных выражений

Колонка Test-W должен быть заключен в dobule цитатой

Select FLAGS, 
CASE FLAGS 
WHEN 0 THEN '10000000' 
WHEN 1 THEN '01000000' 
WHEN 2 THEN '00100000' 
WHEN 3 THEN '00010000' 
WHEN 4 THEN '00001000' 
WHEN 5 THEN '00000100' 
WHEN 6 THEN '00000010' 
WHEN 7 THEN '00000001' 
ELSE '00000000' 
END as "Test-W" 
FROM V_TEST 
1

Конечно, CASE многословен и легко интерпретировать. Вы также можете написать тот же запрос, используя DECODE -

SELECT FLAGS, 
     DECODE(FLAGS, 
     0 , '10000000', 
     1 , '01000000', 
     2 , '00100000', 
     3 , '00010000', 
     4 , '00001000', 
     5 , '00000100', 
     6 , '00000010', 
     7 , '00000001', 
      '00000000') 
    AS TEST-W 
FROM V_TEST 
/