Oracle APEX 向查询添加条件过滤器

Oracle APEX adding a conditional filter to a query

如何向查询添加条件过滤器?我在页面上有一个下拉菜单,我想根据下拉菜单选择的值过滤报告查询。我对那部分没意见(只需将项目名称添加到前面有一列的查询),但问题是如果下拉列表中没有选择任何内容,我希望不添加过滤器。如何实现?

更新:

WHERE 子句示例:

WHERE ID=5 AND START_DATE=SYSDATE-:P1_NUM_OF_DAYS

如果选择了P1:NUM_OF_DAYS,如果没有,则应选择所有日期的数据

如果 下拉列表(Select 列表)项目的名称是 P1_DEPTNO,那么

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

我相信您正在寻找的是基于函数的报告。这将允许您包含一个 PL/SQL 函数体,该函数体将 return 来自 table/view 的查询,并根据页面项目值应用任何过滤器(如果有)。当您希望最终用户能够灵活地动态应用过滤器时,这是经典报告的一种非常常见的用法。

代码是这样的:

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;

只需确保将页面项的值存储在会话中即可。您可以通过提交页面或执行 'redirect and set value' 来实现(如果您确实希望有另一个按钮,例如 'Apply Filter')。此外,根据您希望如何实现它,为 'source used' 设置适当的值。

希望对您有所帮助!