2014-01-22 8 views
0

Я пытаюсь выполнить запрос в базе данных Oracle. Запрос имеет конструкцию случая в where where.Oracle - case in where where

where 
    sale.op = 2 and 
     case when (:stat = -11) then (sale.type_id = 27 or sale.type_id = 28 or sale.type_id = 29) 
    else 
    (sale.type_id = 27) 
    end 

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

ORA-00907: missing right parenthesis.

В Derby SQL это работает. Кто-нибудь может мне помочь? Спасибо.

+0

CASE оценивает условия и возвращает выражение, которое должно быть оценено с использованием оператора для некоторого значения/столбца. – Incognito

ответ

5
where sale.op = 2 
and ( (:stat = -11 and sale.type_id in (27, 28, 29)) 
     or (:stat <> -11 and sale.type_id = 27) 
    ) 
1

попробовать этот запрос:

where 
    sale.op = 2 and 
     ((:stat = -11 and (sale.type_id = 27 or sale.type_id = 28 or sale.type_id = 29)) 
     or (:stat <> -11 and sale.type_id = 27)) 
1

Вы также можете попробовать без CASE, используя простые операторы AND и OR:

where 
    sale.op = 2 and ((:stat = -11 and (sale.type_id = 27 or sale.type_id = 28 or sale.type_id = 29)) 
     OR (:stat <> -11 and sale.type_id = 27)) 
1

попробовать этот запрос

where 
    sale.op =2 and 
    ((:stat = -11 and sale.type_id=any(27,28,29)) or 
     (:stat <> -11 and sale.type_id = 27)) 

It выглядит более ясно !!!