Oracle Apex 5.1交互式网格过滤器

时间:2018-02-20 10:52:37

标签: oracle-apex

Interactive Grid 5.1:我想抑制初始搜索,这意味着没有过滤器"没有搜索。怎么样?

1 个答案:

答案 0 :(得分:0)

出于测试目的,我基于Scott的EMP表创建了一个交互式网格(IG)。默认情况下,一旦页面运行,它就会检索所有员工,因为IG查询中没有WHERE条件。

然后我打开DEBUG模式,进入"国王"进入搜索栏并点击 Enter 键。当然,King的数据显示在屏幕上,但这不是有趣的部分 - 调试信息是。

如果你看一下,你会发现Apex改写了你的原作"查询并添加了一些额外的信息。这就是你要找的东西:

Rewrite SQL to: select a.* from (select q.*,count(*) over () "APEX$TOTAL_ROW_COUNT"
from(select q.*
from(select "ROWID" "APEX$ROWID","EMPNO","ENAME","JOB","MGR","HIREDATE","SAL","COMM","DEPTNO"
from(select EMPNO,
       ENAME,
       JOB,
       MGR,
       HIREDATE,
       SAL,
       COMM,
       DEPTNO
  from EMP
)q
)q
where (1=2 or upper(q."ENAME") like :apex$1 or upper(q."JOB") like :apex$2)
)q
)a
where ROWNUM <= :p$_max_rows

注意WHERE条款:

where (1=2 or upper(q."ENAME") like :apex$1 or upper(q."JOB") like :apex$2)

啊哈!由于ENAME和JOB是唯一的VARCHAR2列,似乎Apex希望这些值中的任何一个都能过滤数据。好的,我把我自己的IG SELECT声明改写为

select EMPNO,
       ENAME,
       JOB,
       MGR,
       HIREDATE,
       SAL,
       COMM,
       DEPTNO
  from EMP
where :apex$1 is not null and :apex$2 is not null  --> added this

再次运行该页面。你猜怎么着? IG的网格是空的!

那么,如果您正在寻找的东西,请尝试一下 - 在调试模式下运行页面,查看结果并根据您看到的内容修改您的查询。希望它有所帮助。