2013-09-10 3 views
0

Возможно ли иметь предложение CASE IN() в WHERE Oracle?Oracle - использовать CASE в WHERE и IN()

Например:

SELECT vip 
FROM table 
WHERE 
    CASE WHEN $inputVar LIKE '' 
    THEN vip IN (1,2,3) 
    ELSE vip in ($inputVar) 
    END 

Edit: С помощью этого кода я получаю сообщение об ошибке:

ORA-00905: missing keyword

+0

Что такое '$ inputVar'? Вероятно, в вашем запросе должен быть только оператор 'OR', но если вы ожидаете передать скалярную переменную, которая представляет собой строку с значениями, разделенными запятыми, и они оцениваются как часть списка' IN', это не сработает. –

ответ

1

сделать это с помощью подзапроса.

SELECT vip 
FROM table 
WHERE 
vip in 
(select 
    CASE WHEN $inputVar LIKE '' 
    THEN 1 
    ELSE $inputVar 
    END from dual) 

Но если вы хотите, чтобы значение по умолчанию было как несколько записей, разделенных запятой, это невозможно. Вы должны создать его динамически.

ли это в запросе с помощью объединения

select * from table where vip in (1,2,3) and $inputvar = '' 
union all 
select * from table where vip in $inputvar 
+0

Эта часть не удалась ГДЕ vip IN (ВЫБЕРИТЕ СЛУЧАЙ, КОГДА «НРАВИТСЯ» ТО, ЧТО 1 ВЫШЕ 2,3,4 КОНЕЦ ИЗ ДВУХ) Изменить: что это означает для его динамического отображения? Извините за глупый вопрос. Пожалуйста, покажите пример. Благодарю. – Lamy

+0

Я не могу использовать хранимую процедуру в моем случае. Все равно, спасибо за помощь. – Lamy

+0

из таблицы, где vip в $ inputvar - если $ inputvar - пустая строка, тогда Oracle не выполнит запрос ... – Lamy