Oracle SELECT查询未返回预期行,条件变更后返回数据求解析
问题原因分析
核心条件差异导致过滤结果不同
你的两个查询仅在最后一行对au.old_text的判断逻辑上有区别:
- 原查询的
and au.old_text is null:只筛选**DEPARTMENT_ID列首次赋值**的审计记录——也就是该字段第一次被设置值,之前没有旧值,所以old_text为空。 - 修改后的
and au.old_text is not null:筛选**DEPARTMENT_ID列被更新**的审计记录——也就是该字段之前已有值,后续被修改,old_text存储了修改前的旧值,不为空。
标记行未返回的直接原因
你标记的第4、6行属于更新操作生成的审计记录,它们的old_text字段存在实际值(不为空),完全不符合原查询中au.old_text is null的过滤条件,因此被排除在结果集之外。
验证方法
你可以单独执行以下SQL,直接查看目标审计记录的old_text值,验证上述结论:
select au.old_text, au.new_text, au.visible_identification from bsaudt_cd_table au where au.table_name = 'BSCORE_SAMPLE_CONT' and au.column_name = 'DEPARTMENT_ID' and REGEXP_SUBSTR(au.visible_identification, '[^;]+') = '2207021' -- 对应sc.id=2207021
内容的提问来源于stack exchange,提问作者schmimla
相关产品推荐
相关产品推荐

