Mожно ли сочитать несколько условий в зависимости от значений параметров?

Можно ли сочитать несколько условий в зависимости от значений параметров?

Есть условие:

and (:x is null or ','||:x||',' like '%,'||column3||',%')

То есть, что пытаюсь сделать, сейчас произвожу выборку по условию :x в колонке column3. Мне нужно проверить :x, если допустим будет равен all, то произвести выборку по определённым значениям. Например:

column3` in ('value1', 'value2')

В этом примере с данными пытаюсь отфильтровать несколько условий такого вида:

where df in (decode(:x, 'Other', 'vol1'), 'vol2')

И получаю нужный мне результат, но, затрудняюсь дальше с ветвлением, соответсвенно, если :x будет vol3 или vol2 выполнить выборку по ним, а если :x равен 'Other', то выполнить по заданным значениям, допустим ('vol4','vol5'). И попытаться учесть то, что может быть передано несколько условий, 'vol1' и Other, и тогда выполнить выборку по обоим.

Возможно ли реализовать подобное?


Ответы (1 шт):

Автор решения: 0xdb

Попробуйте так (db<>fiddle):

with params (par1, par2) as (
    select sys.ODCIVarchar2List('vol1','vol2'), 'vol3' from dual 
)
select two.* from two, params
where df in (
    select column_value from table (par1) union all
    select par2         from dual
    )

CTE тут только заменяет переменные связывания, в реальном запросе :par1 ... :par1.

→ Ссылка