我在APEX页面中有一个报告,它有多个列,结果(行数)从10,000到1,000,000(1M)记录之间的任何位置。页面项目的布尔值评估不正确
有一个有条件的where子句我有,而且为了使用一个页面元素的值,以确定或限制所显示的结果......它看起来是这样的:
SELECT
...
FROM ...
WHERE ...
AND (:P2_STARTDATE IS NULL OR TO_DATE(:P2_STARTDATE, 'DD-MON-YYYY HH24:MI:SS') < creation_date)
我相信这在任何时候我做了P2_STARTDATE
页面项目输入一个值,则比较发生,但是当我不为,则页面项目进入任一值,应该是NULL
和布尔操作应该只返回TRUE为P2_STARTDATE IS NULL
评价。 ..
查询使执行时间占用在0.5M行中搜索时多达45+秒,这是不可接受的。我写了下面的变化来测试我的理论:
SELECT
...
FROM ...
WHERE deleted_flag = 'N'
AND (:P2_STARTDATE IS NULL) -- comment the rest of the evaluation....
它立即计算结果为NULL,并返回结果集相同0.5M +在1秒左右......现在,我要是设置的值,则结果集是空的,明显。
所以问题是,我如何才能使Oracle APEX快速评估为TRUE表达式?感谢您提供的任何提示,解决方法或解决方案。
你检查会话状态信息,以确保P2_STARTDATE还真是空?调试日志怎么样?你有没有尝试从sqlplus运行相同的查询,看看它是否也需要很长时间? – eaolson
嘿@eaolson,为P2_STARTDATE值检查会话时,它仅仅是空的,它的状态是_Updated_或_RESET为Null _... –
只是一种预感:你设置了'启用部分页面Refresh'报告='是'?如果是这样,你有没有在“提交的页面项目”中包含P2_STARTDATE? –