Oracle APEX SQL查询按JIRA参数是否为空动态调整过滤条件咨询
你可以直接在WHERE子句中新增参数非空判断逻辑,无需拆分两个查询,也不需要用CASE/IF表达式,修改后的SQL如下:
SELECT name AS d, test_run_id AS r FROM test_run WHERE (:TR_BASED_ON_PROJECT IS NULL OR project_jira_key = :TR_BASED_ON_PROJECT) AND folder_id NOT IN ( SELECT folder_id FROM folder WHERE name IN ( SELECT column_value FROM TABLE(apex_string.split(config.get('ATM_DASHBOARD_CONFIGURATION_FOLDER_EXCLUDE'), ',')) ) );
逻辑说明
- 当绑定参数
TR_BASED_ON_PROJECT有值时,project_jira_key = :TR_BASED_ON_PROJECT条件生效,仅返回对应JIRA项目的测试运行记录 - 当绑定参数
TR_BASED_ON_PROJECT为NULL时,前面的判断条件整体为真,不会对project_jira_key做任何限制,仅保留排除指定文件夹的逻辑,返回所有项目的符合要求的记录
注意事项
如果担心参数变化导致执行计划不稳定,可以在SQL开头加提示/*+ OPT_PARAM('optimizer_features_enable', '12.2') */启用Oracle的自适应游标功能,避免不同参数值走不合适的执行计划。
如果你的业务场景中project_jira_key不会为NULL,也可以用更简洁的写法替换OR判断:project_jira_key = NVL(:TR_BASED_ON_PROJECT, project_jira_key)
注意:如果存在project_jira_key为NULL的记录,NVL写法会过滤掉这些NULL记录,这时候优先用第一种OR判断的写法。
内容的提问来源于stack exchange,提问作者Kalfja
相关产品推荐
相关产品推荐

