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

Oracle 19c插入含&的JSON字段异常,求前端正确插入方案

问题解决方法

核心原因

Oracle中&是默认的变量替换符,当JSON内容包含&ORACLE时,Oracle会将其识别为需要输入值的绑定变量,进而导致解析错误,甚至错误替换内容。

具体解决方案

1. 临时禁用会话级变量替换

在执行JSON插入/解析的SQL前,先执行以下命令关闭变量替换功能:

SET DEFINE OFF;

执行完相关操作后,如果需要恢复变量替换,可以执行:

SET DEFINE ON;

注意:这个设置仅对当前会话有效,适合在并发程序的数据库会话初始化阶段执行,避免影响其他需要使用绑定变量的业务逻辑。

2. 转义JSON中的&符号

在将JSON数据传入Oracle前,把所有&替换为\&,确保Oracle将其视为普通字符。例如:
原JSON字段:

"Column1":"JAVA & ORACLE"

转义后:

"Column1":"JAVA \& ORACLE"

注意:转义操作需要在程序端完成,确保转义后的JSON格式仍然合法,避免JSON解析失败。

3. 修正JSON解析SQL的路径表达式

你当前的SQL中,JSON路径的数组写法存在不必要的转义,Oracle的JSON路径语法中数组直接用$.Data[*]即可,无需转义方括号。修正后的SQL如下:

WITH json AS
( SELECT pin_clob doc FROM dual
)
SELECT Column1
FROM json_table(
  (SELECT doc FROM json),
  '$.Data[*]' COLUMNS ( Column1 VARCHAR2(70) PATH '$.Column1')
);

错误的转义可能导致JSON解析异常,修正后能确保正确遍历Data数组中的元素。

推荐方案

如果并发程序中没有依赖Oracle变量替换的场景,优先使用方案1,操作简单且不影响JSON内容本身;如果必须保留变量替换功能,则使用方案2在程序端处理JSON字符串;同时务必修正SQL中的路径表达式(方案3),避免额外的解析问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 07:42:47