我在 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 并在大约 1 秒内返回相同的结果集 0.5M+ ......现在,如果我确实设置了一个值,那么结果集显然是空的。
所以问题是,如何让 Oracle APEX 快速评估为 TRUE 该表达式?感谢您提供的任何提示、解决方法或解决方案。