Oracle APEX добавляет условный фильтр к запросу - PullRequest
0 голосов
/ 12 июня 2018

Как добавить условный фильтр в запрос?У меня есть раскрывающийся список на странице, и я хочу отфильтровать запрос отчета на основе выбранного значения раскрывающегося списка.Я согласен с этой частью (просто добавьте имя элемента в запрос, которому предшествует столбец), но дело в том, что я хочу, чтобы фильтр не добавлялся, если в выпадающем списке ничего не выбрано.Как это можно сделать?

Обновление:

Пример предложения WHERE:

WHERE ID=5 AND START_DATE=SYSDATE-:P1_NUM_OF_DAYS

, если выбрано P1: NUM_OF_DAYS, и если нет, данные должны бытьвыбрано на все даты

Ответы [ 2 ]

0 голосов
/ 13 июня 2018

Я считаю, что вы ищете отчет на основе функций.Это позволит вам включить тело функции PL / SQL, которое будет возвращать запрос из таблицы / представления, а также применять любые фильтры (если таковые имеются) на основе значений элементов страницы.Это очень распространенное использование для классических отчетов, когда вы хотите, чтобы конечные пользователи могли гибко применять фильтры к отчету на лету.

Код выглядит примерно так:

declare
q varchar2(4000);
begin
q:='select * from TABLE_NAME WHERE ID = 5
and ';
IF :P1:NUM_OF_DAYS IS NOT NULL THEN
q:=q||' NUM_OF_DAYS= :P1:NUM_OF_DAYS AND ';
END IF;
return q||'1=1';
END;

Просто убедитесь, что у вас есть значение элементов страницы, сохраненное в сеансе.Вы можете сделать это, отправив страницу или выполнив «перенаправление и задание значения», если вы хотите использовать другую кнопку, например «Применить фильтр».Кроме того, имейте соответствующее значение для «используемого источника» в зависимости от того, как вы хотите, чтобы это было реализовано.

Надеюсь, это поможет!

0 голосов
/ 12 июня 2018

Если для этого выпадающего (Выбрать список) имя элемента - P1_DEPTNO, то

where (d.deptno = :P1_DEPTNO or :P1_DEPTNO is null)
  and ...
...