【问题标题】:Adding a custom search for a classic report为经典报告添加自定义搜索
【发布时间】:2019-04-22 18:33:20
【问题描述】:

我想在我的经典报告中添加搜索,所以我在我的页面上添加了一个文本框和一个按钮,在报告上方,我向页面添加了一个进程,执行 PL/SQL 代码:

DECLARE
    v_sql varchar2(4000);
BEGIN
IF :P3_SEARCH IS NOT NULL THEN
    v_sql := q'[select field1, field2, field3
           FROM Table1
           WHERE category_id = ]' ||TO_NUMBER(:P3_CATEGORY)||
           q'[ AND (function(id) LIKE '%]'||:P3_SEARCH||| 
           q'[%' OR field2 LIKE '%]' ||:P3_SEARCH|| 
           q'[%' OR field3 LIKE '%]' ||:P3_SEARCH|| q'[%')]';
ELSE
    v_sql := q'[select field1, field2, field3
           FROM Table1
           WHERE category_id = ]' ||TO_NUMBER(:P3_CATEGORY)|| q'[]';
    END IF;

  apex_debug.MESSAGE('my query is: ' || v_sql);      

    --   RETURN v_sql;
END;

我有两个问题 - 我的结果查询没有按预期出现 - % 符号消失了,而不是

select field1, field2, field3
FROM Table1
WHERE category_id = 4
AND (function(id) like '%test%' OR field2 like '%test%' OR field3 like '%test%')

我明白了

select field1, field2, field3
FROM Table1
WHERE category_id = 4
AND (function(id) like 'test' OR field2 like 'test' OR field3 like 'test')

当单击搜索按钮时,我也无法弄清楚如何为我的报告区域切换源 sql。有人可以帮忙吗?

【问题讨论】:

    标签: oracle plsql oracle-apex oracle-apex-5.1


    【解决方案1】:

    它必须是动态的吗?因为,该查询中没有任何动态。如果是:P3_SEARCH 困扰您,那么有一条出路。简化后如下所示:

    select something
    from some_table
    where some_column = :P3_SEARCH        --> condition A
       or :P3_SEARCH is null;             --> condition B
    

    扩展到您的查询,它可以重写如下:

    select field1, field2, field3
    from table1
    where category_id = to_number(:P3_CATEGORY)
      and (  
             --> condition A begins here
             -- condition for P3_SEARCH is not null
            (     :P3_SEARCH is not null
              and(   function(id) like '%' || :P3_SEARCH || '%'
                  or field2       like '%' || :P3_SEARCH || '%'
                  or field3       like '%' || :P3_SEARCH || '%'
                 )
            )
            --> condition A ends here  
          or :P3_SEARCH is null        --> condition B
         );
    

    看看有没有帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-08-24
      • 1970-01-01
      • 2014-04-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多