首页 > 解决方案 > 如何在 Oracle json_arrayagg 中添加虚拟记录

问题描述

我有一个包含两列的简单 Oracle 数据库表,有这个查询

 select
          json_object( key 'clientTypes' VALUE
          (
                   select
                            json_arrayagg( json_object( key 'code' VALUE ct.code, key 'name' VALUE ct.name ) ORDER BY ct.code ASC )
                   from
                            CASINO.CLIENTTYPES ct
                   WHERE
                            ct.code != 'system'
          )
          returning clob ) responseJson
FROM
          DUAL

结果是带有 CLOB 的单列,其中包含带有嵌套数组的 JSON 对象

{
    "list": [{
        "code": 1,
        "name": "abc"
    },
    {
        "code": 2,
        "name": "def"
    }]
}

我需要在生成的 JSON 对象中添加单个虚拟记录,如下所示

{
        "list": [{
            "code": 1,
            "name": "abc"
        },
        {
            "code": 2,
            "name": "def"
        },
        {  "code": dummy code,
           "name": "dummy name"
        }]
    }

标签: arraysjsonoracleunionunion-all

解决方案


我建议您在进行 JSON 转换之前将所有虚拟数据合并

例如采取这个:

from  CASINO.CLIENTTYPES ct

并做到

from (
  select systemcode, code, name from casino.clienttypes    
  union all
  select 'x', -1, 'dummy name' from dual
) ct

如果您想让代码说“虚拟代码”,您需要对来自 clienttypes 表的实际数字代码执行 TO_CHAR,例如TO_CHAR(code) as code


推荐阅读