经典报告中的Oracle Apex 5.0自定义搜索

时间:2015-09-17 12:13:43

标签: oracle search oracle-apex

我正在使用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的搜索,这意味着我可能会留下一些项目为空,如果所有项目都是空的,我需要显示整个记录,谢谢你的帮助。

2 个答案:

答案 0 :(得分:2)

有两种方法可以做到这一点:

1。 “快而又脏”的方式

只要您处理性能不会成为问题的小型数据集,这就没问题了。 只需在您的条件中允许空值,例如

 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))

等等。

2。动态SQL

对于性能可能成为问题的大型数据集,这更好。 将报告源类型更改为“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等示例应用程序 - 里程碑,它可以为您提供一些准备其余部分的想法。