我正在使用Oracle APEX 5.0,并尝试根据多个条件构建自定义搜索的经典报告,例如(从日期,到日期,序列和Emp名称(从列表中选择)返回ID)),我写了条件:
where emp_id = nvl(:P73_EMP_ID,emp_id)
or ror_serial like nvl('%'||:P73_SERIAL||'%',ror_serial)`
or ror_effective_date between to_date(:P73_FROM_DATE) and to_date(:P73_TO_DATE)
and ror_approved_flag = 'N'
问题是我需要基于一个或多个Criteria的搜索,这意味着我可能会留下一些项目为空,如果所有项目都是空的,我需要显示整个记录,谢谢你的帮助。
答案 0 :(得分:2)
有两种方法可以做到这一点:
只要您处理性能不会成为问题的小型数据集,这就没问题了。 只需在您的条件中允许空值,例如
and (:P73_FROM_DATE is null or ror_effective_date >= to_date(:P73_FROM_DATE))
and (:P73_FROM_DATE is null or ror_effective_date <= to_date(:P73_TO_DATE))
等等。
对于性能可能成为问题的大型数据集,这更好。 将报告源类型更改为“PL / SQL函数返回SQL查询”。 然后将源更改为这样
declare
q long;
begin
-- The query with any conditions always applied
q := 'select a, b, c from mytable where ror_approved_flag = ''N''';
-- Append any optional conditions
if :P73_FROM_DATE is not null then
q := q || ' and ror_effective_date >= to_date(:P73_FROM_DATE)';
end if;
-- etc.
return q;
end;
这将导致根据您拥有的条件生成适当的查询。这意味着Oracle可以为条件选择最合适的查询计划。
答案 1 :(得分:-1)
交互式报告可以是这样的。您可以过滤和使用多个过滤器。您也可以保存报告。它以最小的SQL知识满足您的所有要求。
不知道您的查询有多复杂,但如果您需要更改查询的语法,那么只有使用pl / sql逻辑的prepare语句。
另请参阅APEX第35页中的P-Track等示例应用程序 - 里程碑,它可以为您提供一些准备其余部分的想法。