2016-05-03 3 views
1

Как использовать if elsif внутри case при использовании Oracle 11G?Oracle IF внутри CASE

Я хочу закончить значение type_pre с 3 или 4 на основе другого столбца: gr.gt_id.

Я пытаюсь запустить и сообщение об ошибке отсутствует.

Есть ли лучший способ выполнить эту задачу?

CASE 
    WHEN certv.id IS NOT NULL THEN NULL 
    WHEN cert.id IS NOT NULL THEN 
     IF gr.gt_id = 0 THEN type_pre = 3 
     ELSIF gr.gt_id = 1 THEN type_pre = 4 
     END IF 
    WHEN not.id IS NOT NULL THEN NULL 
END as type_pre, 
+0

Выполняете ли вы это в простом SQL или в процедуре/функции PL/SQL/etc.? – mathguy

+0

Это вид, но в простой sql тоже будет работать –

ответ

2
CASE 
    WHEN certv.id IS NOT NULL     THEN NULL 
    WHEN cert.id IS NOT NULL and gr.gt_id = 0 THEN 3 
    WHEN cert.id IS NOT NULL and gr.gt_id = 1 THEN 4 
    WHEN not.id IS NOT NULL     THEN NULL 
END as type_pre, 
+0

thank's @mahguy он работает так succintly различия в синтаксисе sql. –

1

Я вижу, что никто не объяснил вам ошибки, так что позвольте мне сказать, где вы wen't неправильно:

Во-первых, нет необходимости в вложенными ИФ/Case, это может быть сделано с одиночный случай каждый раз подобный @mathguy ответ.

IF используется в PL/SQL и не могут быть использованы непосредственно в оракула, так что если вы хотите сделать это в методе, с вложенными условиями, то это должно быть ваш запрос:

CASE 
     WHEN certv.id IS NOT NULL THEN NULL 
     WHEN cert.id IS NOT NULL THEN 
     CASE WHEN gr.gt_id = 0 THEN = 3 
      WHEN gr.gt_id = 1 THEN = 4 END 
     WHEN not.id IS NOT NULL THEN NULL 
    END as type_pre, 

Ваш Второй проблемой, помимо использования IF, было использование выписки в части THEN. Это CASE EXPRESSION, его можно использовать, чтобы поместить значение, а не инструкцию, поэтому я удалил часть type_pre.

Смежные вопросы