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

如何在Oracle的JSON_ARRAYAGG生成的JSON数组中添加虚拟记录

在Oracle查询生成的JSON数组中添加虚拟记录

我来帮你搞定这个需求!要在生成的JSON数组里加入那条虚拟记录,核心思路是先把原表的有效记录和虚拟记录合并,再进行JSON聚合操作。下面是具体的实现方案:

通用解决方案(字符串类型code)

如果你的code字段是字符串类型,直接用UNION ALL把虚拟行和原查询结果合并即可:

select json_object( 
    key 'list' VALUE ( 
        select json_arrayagg( 
            json_object( 
                key 'code' VALUE code, 
                key 'name' VALUE name 
            ) ORDER BY code ASC 
        ) 
        from (
            -- 原表中符合条件的记录
            select ct.code, ct.name 
            from CASINO.CLIENTTYPES ct 
            WHERE ct.code != 'system'
            -- 追加虚拟记录
            UNION ALL
            select 'dummy code' as code, 'dummy name' as name from DUAL
        ) combined_records
    ) returning clob 
) responseJson 
FROM DUAL

数值类型code适配方案

如果你的code是数值类型(比如示例里的1、2),记得把虚拟记录的code改成对应数值,比如用一个不会和现有数据冲突的数值(比如999):

select json_object( 
    key 'list' VALUE ( 
        select json_arrayagg( 
            json_object( 
                key 'code' VALUE code, 
                key 'name' VALUE name 
            ) ORDER BY code ASC 
        ) 
        from (
            select ct.code, ct.name 
            from CASINO.CLIENTTYPES ct 
            WHERE ct.code != 'system'
            UNION ALL
            select 999 as code, 'dummy name' as name from DUAL
        ) combined_records
    ) returning clob 
) responseJson 
FROM DUAL

额外优化:固定虚拟记录在数组末尾

如果希望虚拟记录始终排在数组最后,不受code排序影响,可以给合并后的记录加个排序权重字段:

select json_object( 
    key 'list' VALUE ( 
        select json_arrayagg( 
            json_object( 
                key 'code' VALUE code, 
                key 'name' VALUE name 
            ) ORDER BY sort_order ASC, code ASC 
        ) 
        from (
            select ct.code, ct.name, 1 as sort_order
            from CASINO.CLIENTTYPES ct 
            WHERE ct.code != 'system'
            UNION ALL
            select 'dummy code' as code, 'dummy name' as name, 2 as sort_order from DUAL
        ) combined_records
    ) returning clob 
) responseJson 
FROM DUAL

这样原表记录会优先按code排序,虚拟记录会固定排在数组最后。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 08:47:38