ORA-30186: ‘‘\‘‘ 的后面必须为四个十六进制的字符或另一个 ‘‘\‘‘

本文讨论了在Oracle数据库中解析包含生僻字的JSON字符串时遇到的ORA-30186异常。问题源于生僻字无法正确识别。解决方法是在解析前使用REPLACE函数将生僻字转换为UTF编码。示例代码展示了如何处理并成功打印JSON对象。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Oracle数据库解析字符串生成JSON对象时.生僻字识别失败.抛出ORA-30186

示例代码


declare
  str varchar2(2000);
  obj json;    -- json对象
begin
  -- json 字符串
  str := '{"name":"碶"}';  
  -- 首先进行格式化
  obj := json(str);    
  -- 打印
  obj.print;
end;

抛出异常

ORA-30186: ''\'' 的后面必须为四个十六进制的字符或另一个 ''\''
ORA-06512: 在 "DEV.JSON_PARSER", line 294
ORA-06512: 在 "DEV.JSON_PARSER", line 390
ORA-06512: 在 "DEV.JSON_PARSER", line 646
ORA-06512: 在 "DEV.JSON", line 13
ORA-06512: 在 line 5

解决方式

在json解析前,通过 replace 函数, 换成 utf 编码


declare
  str varchar2(2000);
  obj json;    -- json对象
begin
  -- json 字符串
  str := '{"name":"碶"}';  
  -- 关键字替换
  str := replace(str, '碶', '\u78b6');
  -- 首先进行格式化
  obj := json(str);    
  -- 打印
  obj.print;
end;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值