You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何合并仅WHERE子句条件不同的两条Oracle审计SQL语句?

优化合并两条仅AUDIT_OPTION不同的Oracle SQL查询语句

这事儿很简单!你这两条SQL除了AUDIT_OPTION的取值不一样,其他条件完全相同,直接用IN子句就能把它们合并成一条干净的查询,效果和分开执行完全一样,还能提升代码的可读性和可维护性。

优化后的SQL语句

SELECT AUDIT_OPTION, SUCCESS, FAILURE 
FROM DBA_STMT_AUDIT_OPTS 
WHERE AUDIT_OPTION IN ('USER', 'ALTER USER')
  AND USER_NAME IS NULL 
  AND PROXY_NAME IS NULL 
  AND SUCCESS = 'BY ACCESS' 
  AND FAILURE = 'BY ACCESS';

补充说明

  • 这个查询会返回两条原语句的所有结果,逻辑上等价于分别执行两条查询后合并结果。
  • 如果之后需要添加更多需要匹配的AUDIT_OPTION值,直接在IN的括号里追加即可,不用重复复制整段SQL,维护起来更方便。

另一种等价写法(用OR)

如果你更习惯用OR,也可以这样写,效果完全一致:

SELECT AUDIT_OPTION, SUCCESS, FAILURE 
FROM DBA_STMT_AUDIT_OPTS 
WHERE (AUDIT_OPTION = 'USER' OR AUDIT_OPTION = 'ALTER USER')
  AND USER_NAME IS NULL 
  AND PROXY_NAME IS NULL 
  AND SUCCESS = 'BY ACCESS' 
  AND FAILURE = 'BY ACCESS';

不过对比下来,IN的写法更直观,尤其是当需要匹配的取值数量较多时,代码会更清爽。Oracle的查询优化器对这两种写法的处理通常是等价的,不会有性能差异,所以优先选更易读的IN就好。

内容的提问来源于stack exchange,提问作者Rahmouni Abdelhak

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 06:36:17