Oracle CASE WHEN - ORA-00936: отсутствует выражение - PullRequest
0 голосов
/ 24 сентября 2019

Я новичок в Oracle и ниже мой SQL.

SELECT * FROM TABLE1 WHERE COLUMN1 = 'YES'
AND COLUMN2 IN (


CASE WHEN EXISTS(SELECT * FROM TABLE1 WHERE COLUMN1 = 'YES' AND COLUMN2 NOT LIKE '%NO%') 
 THEN 
   SELECT COLUMN2 FROM TABLE1 WHERE COLUMN1 = 'YES' AND COLUMN2 NOT LIKE '%YES%'
 ELSE 
   SELECT COLUMN2 FROM TABLE1 WHERE COLUMN1 = 'YES' AND COLUMN2 NOT LIKE '%YES%'  END)

он дает ORA-00936: пропущенное выражение в инструкции then.Что я делаю не так?

1 Ответ

3 голосов
/ 24 сентября 2019

Подзапросы после THEN и ELSE должны быть заключены в круглые скобки:

SELECT * FROM TABLE1 WHERE COLUMN1 = 'YES'
AND COLUMN2 IN (
  CASE 
    WHEN EXISTS (SELECT * FROM TABLE1 WHERE COLUMN1 = 'YES' AND COLUMN2 NOT LIKE '%NO%') 
      THEN (SELECT COLUMN2 FROM TABLE1 WHERE COLUMN1 = 'YES' AND COLUMN2 NOT LIKE '%YES%')
    ELSE (SELECT COLUMN2 FROM TABLE1 WHERE COLUMN1 = 'YES' AND COLUMN2 NOT LIKE '%YES%')
  END
)

Это будет работать, только если эти подзапросы не возвращают более 1 строки.Также оба подзапроса одинаковы.Это опечатка?И IN можно изменить на =, поскольку CASE возвращает только 1 значение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...