首批通过分布式安全可靠测评,为关键业务系统打造
程序调用 blob.setBytes(1,bytes,0,bytes.length) 插入 blob 报错 ORA-25137:Data value out of range,数据库报错:char type length is too long ret=-4157
更新时间:2026-05-19 08:21
问题现象
程序使用 oceanbase-client-1.1.10.8 驱动调用 blob.setBytes(1,bytes,0,bytes.length); 函数插入 blob 字段报错 ORA-25137:Data value out of range。


关键信息
[2024-11-12 15:18:16.238817] WDIAG [COMMON] ob_obj_cast.cpp:11007 [955286][0][xxxxx-xxxxx-xxxxx-xxxxx] [lt=17] [dc=0][errcode=-4157] char type length is too long(ret=-4157, str_len_byte=36804, max_accuracy_len=32767, obj={"RAW":, collation:"binary", coercibility:"IMPLICIT"})
[2024-11-12 15:18:16.238835] WDIAG [SQL.ENG] ob_expr_column_conv.cpp:259 [955286][0][xxxxx-xxxxx-xxxxx-xxxxx] [lt=12] [dc=0][errcode=-4157] failed to check accuracy(ret=-4157, accuracy={length:32767, precision:-1, scale:-1}, collation_type=63, res_obj={"RAW":, collation:"binary", coercibility:"IMPLICIT"})
[2024-11-12 15:18:16.238848] WDIAG [SQL.ENG] ob_expr_column_conv.cpp:195 [955286][0][xxxxx-xxxxx-xxxxx-xxxxx] [lt=9] [dc=0][errcode=-4157] fail to convert skip null check(ret=-4157)
[2024-11-12 15:18:16.238950] WDIAG [PL] ob_pl.cpp:2448 [955286][0][xxxxx-xxxxx-xxxxx-xxxxx] [lt=56] [dc=0][errcode=-4157] Cast result type failed(ret=-4157, params->at(i)={obj:{"CHAR":"2F396A2F34414151536B5A4A5267414241514141415141424141442F327742444141454241514542415145424151454241514542415145424151454241514542415145424151454241514542415145424151454241514542415145424151454241514542415145424151454241514542415145424151482F3277424441514542415145424151454241514542415145424151454241514542415145424151454241514542415145424151454241514542415145424
7264317952664D6B3338386C663557336157767664354C6533726F746233766C616C6F56356246322B5761302B554355456B71437A37513456437938347775646E3369354837795373613367646D774F426A49594F6F344479714
[2024-11-12 15:18:16.239016] WDIAG [PL] ob_pl.cpp:2551 [955286][0][xxxxx-xxxxx-xxxxx-xxxxx] [lt=52] [dc=0][errcode=-4157] fail to exec init_params(params, is_anonymous)(ret=-4157)
问题原因
前台程序是调用的
blob.setBytes函数,实际到数据库层面执行的 SQL 是call dbms.log.write('','','','')来写入数据库。call dbms.log.write('','','','')这里的值都是字符串类型,传入的是 blob 的数据太大,超过了字符串类型的最大容量导致的报错。本质是上 JDBC 没有做好处理,不该这么调用,高版本 JDBC 可以解决此问题。
问题的风险及影响
无法插入 blob 字段。
影响租户
影响 OceanBase 数据库中的 Oracle 租户和 SYS 租户,对于 MySQL 租户无影响。
适用版本
OceanBase 数据库 V3.x 版本。
OceanBase Connector/J V1.x 版本。
解决方法
升级驱动至 OceanBase Connector/J V2.4.3 版本。
修改业务代码进行绕过。