Как добавить два символа с кавычками, разделенными запятой, в операторе case в Oracle - PullRequest
0 голосов
/ 26 февраля 2020

У меня есть сценарий, в котором я выбираю два символа 'P', 'E' из оператора case, когда проверка дела прошла успешно, т. Е. 'ALL' = 'ALL' Ниже приведено то, чего я пытаюсь достичь:

select location,
grade,
City,
process_flag,
from table_v 
where process_flag in (
Case 
when :process_type = 'Processed' then 'P'
when :process_type = 'ERROR' then 'E'
when :process_type = 'ALL' then 'P','E'
ELSE process_flag
END;

Process_type может быть передан как «Обработано», «ОШИБКА», «ВСЕ»

как достичь?

Ответы [ 2 ]

0 голосов
/ 27 февраля 2020

Вы можете использовать несколько значений в предложении IN:

WHERE ( :process_type, process_flag ) IN (
        ( 'Processed', 'P' ),
        ( 'ERROR',     'E' ),
        ( 'ALL',       'P' ),
        ( 'ALL',       'E' ),
      )

, и если вы хотите соответствовать предложению ELSE вашего оператора CASE, тогда:

WHERE ( :process_type, process_flag ) IN (
        ( 'Processed', 'P' ),
        ( 'ERROR',     'E' ),
        ( 'ALL',       'P' ),
        ( 'ALL',       'E' ),
      )
OR    :process_type NOT IN ( 'Processed', 'ERROR', 'ALL' )
0 голосов
/ 26 февраля 2020

Вы можете использовать or ed условия:

where 
       :process_type = 'Processed' and process_flag = 'P'
    or :process_type = 'ERROR'     and process_flag = 'E'
    or :process_type = 'ALL'       and process_flag in ('P', 'E')
...