如何正确使用Oracle JSON_EXISTS匹配两种JSON结构的高危漏洞
解决Oracle JSON_EXISTS匹配两种JSON结构的问题
你的CLOB类型列results存在两种JSON结构:
- 纯数组形式:
[{"severity":"High", ...}, ...] - 带版本的对象嵌套数组形式:
{"version":"x.x", "results":[{"severity":"High", ...}, ...]}
要通过单个JSON_EXISTS语句筛选出包含severity为High的漏洞数据行,可以用OR逻辑同时匹配两种结构的路径:
SELECT * FROM 你的表名 WHERE JSON_EXISTS(results, '$[*]?(@.severity == "High")' OR '$.results[*]?(@.severity == "High")');
逻辑说明
$[*]?(@.severity == "High"):匹配纯数组结构,遍历数组所有元素,检查是否存在severity等于High的项$.results[*]?(@.severity == "High"):匹配嵌套数组的对象结构,定位到results数组后遍历元素,检查是否存在目标severity的项- 两个路径用
OR连接,只要满足其中一种结构的条件,该行就会被筛选出来
注:确保你的Oracle版本为12c及以上,该版本开始支持JSON_EXISTS的多路径逻辑判断。
内容的提问来源于stack exchange,提问作者Mohammed Az
相关产品推荐
相关产品推荐

