Вот как я понял проблему;нет динамический материал необходим.
Для более простого тестирования (со своей стороны, так как у меня нет ваших таблиц), в таблице Скотта DEPT
это может помочь (par_x
- это имя параметра процедуры).
select *
from dept
where deptno in (par_a, par_b, par_c)
or (par_a is null and par_b is null and par_c is null);
Если это разные столбцы, проблем также нет:
select *
from dept
where (deptno = par_a or par_a is null)
and (dname = par_b or par_b is null)
and (loc = par_c or par_c is null);
Если определенный параметр не передан и вы не хотите видеть значение этого столбца, используйте
select case when par_a is not null then deptno
else null
end deptno,
--
case when par_b is not null then dname
else null
end dname,
--
case when par_c is not null then loc
else null
end loc
from dept
where (deptno = par_a or par_a is null)
and (dname = par_b or par_b is null)
and (loc = par_c or par_c is null);
Если вы хотите исключить столбец из набора результатов, ну, это не так просто.Если вы используете (например) Oracle Apex, вы можете не отображать этот столбец.Иначе, в чистом SQL я бы не знал, как это сделать.