如何在含JSON字段的Oracle表中实现多参数动态JSON数据查询?
Oracle JSON文档多条件查询扩展方案
原单条件查询通过JSON_TRANSFORM结合KEEP操作符实现,核心代码如下:
SELECT DISTINCT D.JSONDOC DOC, JSON_TRANSFORM(D.JSONDOC, KEEP '$.* ?(@ like "S104%")') AS FILTERED_JSONDOC FROM master_data D
要扩展为多条件查询,只需在KEEP的过滤表达式中使用逻辑运算符AND/OR组合多个匹配规则:
1. 多条件同时满足(AND)
如果需要保留同时匹配多个规则的JSON字段,比如既以"S104"开头,又包含"ACTIVE"关键词,可修改为:
SELECT DISTINCT D.JSONDOC DOC, JSON_TRANSFORM(D.JSONDOC, KEEP '$.* ?(@ like "S104%" && @ like "%ACTIVE%")') AS FILTERED_JSONDOC FROM master_data D
2. 满足任一条件(OR)
如果需要保留匹配任意一个规则的JSON字段,比如以"S104"开头或者以"E205"开头,可修改为:
SELECT DISTINCT D.JSONDOC DOC, JSON_TRANSFORM(D.JSONDOC, KEEP '$.* ?(@ like "S104%" || @ like "E205%")') AS FILTERED_JSONDOC FROM master_data D
说明
- 使用
&&表示逻辑“与”,||表示逻辑“或”,符合Oracle JSON路径表达式的语法规范 $.*表示遍历JSON文档下的所有顶层字段,可根据实际需求调整路径(比如指定特定字段路径$.info.*)- 保留
DISTINCT用于去重,避免重复返回相同的JSON文档
内容的提问来源于stack exchange,提问作者krul
相关产品推荐
相关产品推荐

