【问题标题】:Oracle Apex 5.0 Custom Search in Classic Report经典报告中的 Oracle Apex 5.0 自定义搜索
【发布时间】:2015-10-25 18:12:06
【问题描述】:

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

【问题讨论】:

    标签: oracle search oracle-apex


    【解决方案1】:

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

    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 可以为条件选择最合适的查询计划。

    【讨论】:

      【解决方案2】:

      交互式报告可以是这样的方式。您可以过滤和使用多个过滤器。您也可以保存报告。它以最少的 sql 知识满足您的所有要求。

      不知道您的查询有多复杂,但如果您需要更改查询的语法,那么唯一的方法就是使用一些 pl/sql 逻辑准备语句。

      另请查看 APEX 第 35 页中的 P-Track 等示例应用程序 - 里程碑,它可以为您提供一些想法来准备其余部分。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-12-11
        • 1970-01-01
        • 1970-01-01
        • 2021-10-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多