---
title: merge into 临时表时在计划执行阶段触发报错-4016 问题排查-OceanBase数据库使用指南
description: 了解OceanBase数据库在实际应用中关于merge into 临时表时在计划执行阶段触发报错-4016 问题排查相关的常见问题和使用技巧，帮助您快速解决merge into 临时表时在计划执行阶段触发报错-4016 问题排查的难题。
image: https://mdn.alipayobjects.com/huamei_22khvb/afts/img/A*OSPzQ6GUQF4AAAAAQHAAAAgAeiGDAQ/original
---
切换语言

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

划线反馈

# merge into 临时表时在计划执行阶段触发报错-4016 问题排查

更新时间：2026-08-25 02:41

适用版本： V4.0.x、V4.1.x、V4.2.x、V4.3.x、V4.4.x 内容类型：Troubleshoot  

## 问题现象

在执行包含 `MERGE INTO` 语句的存储过程时，若目标表为临时表，且 `MERGE INTO` 语句同时包含 `INSERT` 和 `UPDATE` 子句，且源表（src 表）为复杂视图，SQL 执行会报错 `-4016`。

```sql
ORA-00600: internal error code, arguments: -4016, Internal error

```

## 问题原因

该问题是 OceanBase 数据库内核中的一个 Bug。在计划生成阶段，当 `MERGE INTO` 语句的目标为临时表，且源表为复杂视图时，优化器在解析表别名时出现逻辑错误。具体表现为：代价改写深拷贝 stmt 时没有维护 `view_base_item_`，而优化阶段有一些地方依赖这个字段，导致报错。

## 关键信息

### 关键日志

```
[2024-08-13 11:29:39.252968] WDIAG [SQL.OPT] generate_equal_constraint (ob_merge_log_plan.cpp:557) [1263491][T1002_L0_G0][T1002][YB42AC18793A-00061D45521BDE54-0-0] [lt=27][errcode=-4016] get unexpected null(ret=-4016, target_table_scan=NULL)
[2024-08-13 11:29:39.252990] WDIAG [SQL.OPT] check_update_insert_sharding_basic (ob_merge_log_plan.cpp:502) [1263491][T1002_L0_G0][T1002][YB42AC18793A-00061D45521BDE54-0-0] [lt=21][errcode=-4016] failed to generate equal constraint(ret=-4016)
[2024-08-13 11:29:39.252997] WDIAG [SQL.OPT] check_merge_need_multi_partition_dml (ob_merge_log_plan.cpp:455) [1263491][T1002_L0_G0][T1002][YB42AC18793A-00061D45521BDE54-0-0] [lt=6][errcode=-4016] failed to check update insert sharding basic(ret=-4016)
[2024-08-13 11:29:39.253006] WDIAG [SQL.OPT] create_merge_plans (ob_merge_log_plan.cpp:220) [1263491][T1002_L0_G0][T1002][YB42AC18793A-00061D45521BDE54-0-0] [lt=8][errcode=-4016] failed to check need multi-partition dml(ret=-4016)
[2024-08-13 11:29:39.253011] WDIAG [SQL.OPT] candi_allocate_merge (ob_merge_log_plan.cpp:176) [1263491][T1002_L0_G0][T1002][YB42AC18793A-00061D45521BDE54-0-0] [lt=4][errcode=-4016] failed to create merge plans(ret=-4016)
[2024-08-13 11:29:39.253016] WDIAG [SQL.OPT] generate_normal_raw_plan (ob_merge_log_plan.cpp:80) [1263491][T1002_L0_G0][T1002][YB42AC18793A-00061D45521BDE54-0-0] [lt=5][errcode=-4016] failed to allocate merge operator(ret=-4016)
[2024-08-13 11:29:39.253024] WDIAG [SQL.OPT] generate_raw_plan (ob_log_plan.cpp:11977) [1263491][T1002_L0_G0][T1002][YB42AC18793A-00061D45521BDE54-0-0] [lt=8][errcode=-4016] fail to generate normal raw plan(ret=-4016)

```

## 问题的风险及影响

- SQL 执行报错 `-4016`。
 - SQL 结果正确性问题。
 - OBServer core（潜在风险）。

## 适用版本

OceanBase 数据库 4.x 版本。

## 解决方法

1. 将 `MERGE INTO` 语句拆分为独立的 `INSERT` 和 `UPDATE` 语句。
 2. 升级到已修复该问题的版本。

## 规避方式

- 将 `MERGE INTO` 语句拆分为独立的 `INSERT` 和 `UPDATE` 语句。

Previous

[集群重启后 reconfirm 超时导致集群不可用](https://www.oceanbase.com/knowledge-base/oceanbase-database-1000000006835286)

Next

[无主键 BLOB 表反向增量数据一致性问题](https://www.oceanbase.com/knowledge-base/oceanbase-database-1000000006783644) ![有帮助](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) 咨询热线
