Oracle数据库中向JSON对象数组末尾追加元素问题求助
错误原因
- 你使用的
JSON_MODIFY是SQL Server专属的JSON修改函数,Oracle数据库并不支持该函数,因此SQL解析阶段会识别为语法错误,抛出ORA-00917: missing comma报错。
正确实现方案
根据你使用的Oracle版本选择对应写法即可:
Oracle 18c及以上版本(推荐)
使用Oracle原生的JSON_TRANSFORM函数的APPEND操作,语法简洁性能最优:
UPDATE 替换为你的表名 SET configuration = JSON_TRANSFORM( configuration, APPEND '$.sections' = JSON('{"active":false,"code":"page.body"}') ) -- 请添加必要的WHERE条件,避免全表更新 WHERE 替换为你的过滤条件;
Oracle 12cR2 兼容写法
如果使用的是12cR2版本,没有JSON_TRANSFORM函数,可使用JSON_ARRAY_APPEND拼接后回写:
UPDATE 替换为你的表名 SET configuration = JSON_SET( configuration, '$.sections', JSON_ARRAY_APPEND( JSON_VALUE(configuration, '$.sections' FORMAT JSON), '$', JSON('{"active":false,"code":"page.body"}') ) ) -- 请添加必要的WHERE条件,避免全表更新 WHERE 替换为你的过滤条件;
注意事项
- 执行UPDATE前务必替换SQL中的表名、过滤条件,避免误改全表数据
- 正式执行前建议先通过SELECT语句验证修改结果是否符合预期:
SELECT configuration AS old_config, JSON_TRANSFORM( configuration, APPEND '$.sections' = JSON('{"active":false,"code":"page.body"}') ) AS new_config FROM 替换为你的表名 WHERE 替换为你的过滤条件;
- 如果出现类型转换报错,可在函数返回结果外层包裹
TO_CLOB()适配CLOB类型列的存储要求。
内容的提问来源于stack exchange,提问作者danda
相关产品推荐
相关产品推荐

