首批通过分布式安全可靠测评,为关键业务系统打造
PL 中 case when 语句执行期报 -4016
更新时间:2026-05-29 08:46
问题现象
PL 中包含 case when 语句,创建的时候不报错,执行期可能报 -4016 错误。
关键诊断信息
触发条件
当 select into var 语句和 case when 同时出现,且 var 变量恰好用在 case when 语句。
问题原因
select into var 场景下向符号表中符号赋值时把 var 变量的 accuracy 冲掉了,变成 -1,实际上 -1 是指 unknow。case when 的 deduce 未处理 -1 的情况,所以报错 -4016。
问题的风险及影响
PL 创建时不报错,执行报错。当 select into var 语句和 case when 同时出现,且 var 变量恰好用在 case when 语句中时会出现此问题,遇到的概率低,当遇到时可通过定义中间变量 var1,将 var 赋值给 var1,在 case when 中使用 var1 绕过。
影响租户
影响 OceanBase 数据库中的 Oracle 租户和 MySQL 租户,对于 SYS 租户无影响。
影响的版本
OceanBase 数据库企业版 V3.1.2 GA(oceanbase-3.1.2-20210618150922)及之后版本、V3.2.3 GA(oceanbase-3.2.3.0-20220418212020)及之后版本。
解决方法
升级至问题已修复版本。目前已修复的版本包括 OceanBase 数据库企业版 V3.1.2 BP10(oceanbase-3.1.2-110000022022092714)及之后版本、V3.2.3 BP6(oceanbase-3.2.3.3-106000102022111521)及之后版本。
当遇到时可通过定义中间变量
var1,将 var(select into var中的变量)赋值给var1,在case when中使用var1绕过。