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

Oracle 12c无需指定属性查询JSON全字段并统一转字符串的方法

该需求可以实现,根据你使用的Oracle 12c具体版本不同,有两种可用的实现方案:


方案1:Oracle 12cR2(12.2.0.1)及以上版本(推荐)

12cR2版本开始支持JSON_TABLE的通配符语法,不需要手动枚举JSON内的字段,就能自动匹配所有顶级键,同时支持统一转换数据类型:

SELECT jt.*
FROM my_table,
     JSON_TABLE(
         my_json_col,
         '$'
         COLUMNS (
             -- 自动识别所有顶级键,值统一转为VARCHAR2类型,按JSON标准序列化加双引号
             * VARCHAR2(4000) FORMAT JSON
         )
     ) jt
WHERE "USER" = '83';

说明:如果不需要保留值外层的双引号,只需要去掉FORMAT JSON修饰符即可,非字符串类型仍会自动转为纯字符串(比如布尔值false转为'false'、数字18转为'18')。


方案2:Oracle 12cR1(12.1.x)版本

12cR1原生不支持JSON_TABLE自动列匹配,需要通过动态SQL拼接实现:

  1. 先查询出JSON字段的所有顶级键:
SELECT DISTINCT json_value(jt.key, '$') AS json_key
FROM my_table,
     JSON_TABLE(
         JSON_KEYS(my_json_col),
         '$[*]' COLUMNS (key PATH '$')
     ) jt
WHERE "USER" = '83';
  1. 把查询得到的所有键拼接成JSON_TABLE的COLUMNS子句,生成最终的查询语句即可,结构和你当前的参考写法一致,不需要手动逐个录入字段名。

两种方案针对你给出的示例JSON,都可以得到你期望的输出结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 23:27:06