---
title: PL 中 case when 语句执行期报 -4016-OceanBase数据库使用指南
description: 了解OceanBase数据库在实际应用中关于PL 中 case when 语句执行期报 -4016相关的常见问题和使用技巧，帮助您快速解决PL 中 case when 语句执行期报 -4016的难题。
---
切换语言

- 中文站 - 简体中文
- International - English
- 日本站 - 日本語

划线反馈

# PL 中 case when 语句执行期报 -4016

更新时间：2026-05-29 08:46

适用版本： V3.1.x、V3.2.x 内容类型：Troubleshoot  

## 问题现象

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` 绕过。

上一篇

[OceanBase 数据库 Oracle 模式下 PL 模块中不支持包含标识符 NEW](https://www.oceanbase.com/knowledge-base/oceanbase-database-1000000000209969)

下一篇

[Decode 函数中包含 UDF 时报 ORA-01476: divisor is equal to zero](https://www.oceanbase.com/knowledge-base/oceanbase-database-1000000000209968) ![有帮助](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*y6ocSqN8cqsAAAAAAAAAAAAAARQnAQ)![无帮助](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*BG9IQJyLHF8AAAAAAAAAAAAAARQnAQ)![反馈](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*eTWdQKCRKHwAAAAAAAAAAAAAARQnAQ)[AI](https://www.oceanbase.com/obi) 咨询热线
