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

Oracle 19c如何生成键单次列出、值集合紧随的JSON格式?

Oracle 19c 实现指定格式的JSON输出

可以实现你需要的JSON格式,以下是具体的SQL实现方法:

方法一:固定字段直接查询

SELECT JSON_OBJECT(
         'keys' VALUE (SELECT JSON_ARRAYAGG(column_name ORDER BY column_id) 
                       FROM user_tab_columns 
                       WHERE table_name = 'TBL1'),
         'values' VALUE JSON_ARRAYAGG(JSON_ARRAY(val1, val2, val3) RETURNING VARCHAR2)
       ) AS JSON_VAR
FROM tbl1;

代码说明

  • 生成keys数组:通过user_tab_columns系统视图读取表TBL1的列名,按column_id(列定义顺序)排序后用JSON_ARRAYAGG聚合成数组,保证列名顺序与表结构一致。
  • 生成values二维数组:对每行数据,用JSON_ARRAY(val1, val2, val3)将当前行字段转为数组,再通过JSON_ARRAYAGG把所有行的数组聚合为二维数组。
  • 组合最终JSON:用JSON_OBJECT将keys和values两个部分拼接成目标结构的JSON对象。

执行后将得到期望输出:

{"keys" : ["VAL1", "VAL2", "VAL3"], "values" : [["1", "2", "3"],["a", "b", "c"],["1","b","3"]]}

方法二:动态SQL通用版(适配任意列数)

如果表的字段较多,不想手动列写字段名,可以用动态SQL自动适配表结构:

DECLARE
  v_cols VARCHAR2(1000);
  v_sql VARCHAR2(2000);
BEGIN
  -- 获取表的所有列名,按定义顺序拼接
  SELECT LISTAGG(column_name, ',') WITHIN GROUP (ORDER BY column_id)
  INTO v_cols
  FROM user_tab_columns
  WHERE table_name = 'TBL1';
  
  -- 构造动态SQL语句
  v_sql := 'SELECT JSON_OBJECT(
               ''keys'' VALUE (SELECT JSON_ARRAYAGG(column_name ORDER BY column_id) FROM user_tab_columns WHERE table_name = ''TBL1''),
               ''values'' VALUE JSON_ARRAYAGG(JSON_ARRAY(' || v_cols || ') RETURNING VARCHAR2)
             ) AS JSON_VAR
           FROM tbl1';
  
  -- 执行并输出结果
  EXECUTE IMMEDIATE v_sql;
END;
/

这个版本无需手动指定字段,会自动读取表的所有列并生成对应格式的JSON。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 04:01:16