首批通过分布式安全可靠测评,为关键业务系统打造
带有 case when 的查询语句执行报错 -4016 的原因和解决方法
更新时间:2026-05-28 02:06
问题现象
带有 case when 的复杂 SQL 执行报错 -4016,observer.log 日志打印 EDIAG 级别日志 unexpected max length.(ret=-4016。
关键日志信息含有 unexpected max length 完整日志如下。
[2024-11-27 14:06:03.579319] EDIAG [SQL.ENG] aggregate_max_length_for_string_result (ob_expr_operator.cpp:1275) [3449902][T1026_L0_G0][T1026][xxxxx-xxxxx-xxxxx-xxxxx] [lt=15][errcode=-4016] unexpected max length.(ret=-4016, max_length=-1, param_num=4, len_in_byte=false)
问题原因
因为内核缺陷,replace 表达式类型推导存在问题,计算后的字符串长度超过 int32 类型最大值,导致 SQL 报错 -4016。
问题的风险及影响
SQL 执行失败报错。
影响租户
影响 OceanBase 数据库中的 SYS 租户和 Oracle 租户以及 MySQL 租户。
适用版本
OceanBase 数据库 V4.x 版本。
解决方法及规避方式
解决方法:
升级至问题已修复版本。目前已修复的版本包括 OceanBase 数据库 V4.2.1 BP10 Hotfix2(oceanbase-4.2.1.10-110020012024120420)版本。
规避方式:
将 SQL 中的 case when 语句等价改成 decode 语句。