---
title: OceanBase 数据库 V3.x 版本 INSERT SELECT 含 SEQUENCE 列 SQL 执行报错 -4002, Invalid argument 的原因和解决方法-OceanBase数据库使用指南
description: 了解OceanBase数据库在实际应用中关于OceanBase 数据库 V3.x 版本 INSERT SELECT 含 SEQUENCE 列 SQL 执行报错 -4002, Invalid argument 的原因和解决方法相关的常见问题和使用技巧，帮助您快速解决OceanBase 数据库 V3.x 版本 INSERT SELECT 含 SEQUENCE 列 SQL 执行报错 -4002, Invalid argument 的原因和解决方法的难题。
image: https://mdn.alipayobjects.com/huamei_22khvb/afts/img/A*OSPzQ6GUQF4AAAAAQHAAAAgAeiGDAQ/original
---
切换语言

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

划线反馈

# OceanBase 数据库 V3.x 版本 INSERT SELECT 含 SEQUENCE 列 SQL 执行报错 -4002, Invalid argument 的原因和解决方法

更新时间：2026-05-25 09:11

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

## 问题现象

OceanBase 数据库 V3.x 版本老引擎情况下（即 `_enable_static_typing_engine` 为 `false`），INSERT SELECT SQL 向 SEQUENCE 填充列插入数据时报错 `-4002, Invalid argument`。

```shell
obclient [SYS]> CREATE SEQUENCE SEQ_ID START WITH 1 INCREMENT BY 1 NOMAXVALUE;
Query OK, 0 rows affected (0.022 sec)

obclient [SYS]> CREATE TABLE TEST01 (ID NUMBER (11) DEFAULT SEQ_ID.NEXTVAL NOT NULL,CASE_ID NUMBER(11) DEFAULT 0 NOT NULL);
Query OK, 0 rows affected (0.059 sec)

obclient [SYS]> INSERT INTO TEST01 (ID, case_id) SELECT 100000001, case_id FROM (SELECT 123456 AS case_id FROM dual);
ORA-00600: internal error code, arguments: -4002, Invalid argument
[127.0.0.1:2882] [2024-08-24 17:55:35.089141] [xxxxx-xxxxx-xxxxx-xxxxx]

```

## 关键信息

- trace_id 日志。

  ```shell
  [2024-08-24 17:55:35.083588] WARN  [SQL.ENG] get_next_row (ob_phy_operator.cpp:497) [1574][0][xxxxx-xxxxx-xxxxx-xxxxx] [lt=4] [dc=0] get next row failed(ret=-4002, type=84, op="PHY_SEQUENCE")
  [2024-08-24 17:55:35.083661] WARN  [STORAGE] insert_rows (ob_pg_storage.cpp:3528) [1574][0][xxxxx-xxxxx-xxxxx-xxxxx] [lt=4] [dc=0] failed to insert rows(ret=-4002, this={this:0xfffe1b64cec0, pkey:{tid:1100611139453777, partition_id:0, part_cnt:0}, meta:0xfffe2136ba60, log_seq_num:0, last_freeze_ts:0}, ctx={mem_ctx:0xfffe048145d0, warm_up_ctx:null, tables:null, tenant_id:0, trans_id:{hash:14691044093640912749, inc:129942, addr:"127.0.0.1:2882", t:1724493335082064}, is_sp_trans:true, isolation:1, sql_no:1, stmt_min_seq_no:1724493335063205, snapshot_info:{snapshot_version:-1, read_seq_no:0, sql_no:0, trans_id:{hash:0, inc:0, addr:"0.0.0.0", t:0}, is_cursor_or_nested:false}, trans_table_guard:0xfffe048163d8, access_type:0, saved_read_snapshot:-1, trans_ctx:null, trans_desc:null, encrypt_meta:null, is_thread_scope:true})
  [2024-08-24 17:55:35.083793] WARN  [SQL.ENG] open (ob_phy_operator.cpp:167) [1574][0][xxxxx-xxxxx-xxxxx-xxxxx] [lt=6] [dc=0] Open this operator failed(ret=-4002, op_type="PHY_INSERT")

  ```
 - 执行计划。

  ```shell
  obclient [SYS]> explain extended INSERT INTO TEST01 (ID, case_id) SELECT 100000001, case_id FROM (SELECT 123456 AS case_id FROM dual)\G
  *************************** 1. row ***************************
  Query Plan: ========================================
  |ID|OPERATOR      |NAME |EST. ROWS|COST|
  ----------------------------------------
  |0 |INSERT        |     |1        |1   |
  |1 | SEQUENCE     |     |1        |1   |
  |2 |  SUBPLAN SCAN|VIEW1|1        |1   |
  |3 |   EXPRESSION |     |1        |1   |
  ========================================

  Outputs & filters:
  -------------------------------------
  0 - output([nextval(1)(0xfffdd90b0d20)], [VIEW1.100000001(0xfffdd90add80)], [VIEW1.CASE_ID(0xfffdd90ae070)]), filter(nil),
      columns([{TEST01: ({TEST01: (TEST01.__pk_increment(0xfffdd90b0a30), TEST01.ID(0xfffdd9042af0), TEST01.CASE_ID(0xfffdd904c520))})}]), partitions(p0)
  1 - output([VIEW1.100000001(0xfffdd90add80)], [VIEW1.CASE_ID(0xfffdd90ae070)]), filter(nil)
  2 - output([VIEW1.100000001(0xfffdd90add80)], [VIEW1.CASE_ID(0xfffdd90ae070)]), filter(nil),
      access([VIEW1.100000001(0xfffdd90add80)], [VIEW1.CASE_ID(0xfffdd90ae070)])
  3 - output([100000001], [123456]), filter(nil)
      values({100000001, 123456})

  ```

## 问题原因

表中 ID 列的 DEFAULT 值是 `SEQ_ID.NEXTVAL`，在执行类似 `INSERT INTO CASE_HISTORY(ID) VALUE(DEFAULT);` 语句时，这个 DEFAULT SEQUENCE 会被用来生成一个自增值作为 ID 列的默认值，所以计划中会生成一个 SEQUENCE 算子。

如插入语句类似于 `INSERT INTO TEST01 (ID, case_id) SELECT 100000001, case_id FROM (SELECT 123456 AS case_id FROM dual);`， 这种情况下指定了 ID 列的值，不需要生成默认值，所以也就不需要再生成 SEQUENCE 算子，但是当前仍然生成了这个不必要的 SEQUENCE 算子。

在老引擎下，老的 SEQUENCE 算子如果没有生成表达式，它就不能向上传递结果，就会报 -4002。由于这个不必要的 SEQUENCE 算子不需要生成值，实际从执行计划看也没有生成 NEXTVAL 表达式，所以在向上传递结果时，报错了 -4002。

## 问题的风险及影响

SQL 执行出错。

## 影响租户

影响 OceanBase 数据库中的 Oracle 租户，对于 SYS 租户和 MySQL 租户无影响。

## 适用版本

OceanBase 数据库 V3.x 版本。

## 解决方法

升级至问题已修复版本。目前已修复的版本包括 OceanBase 数据库 V3.2.3 BP10 Hotfix10（oceanbase-3.2.3.3-110100012024042814）及之后版本。

上一篇

[是否建议在高并发业务下使用 ORDER、NOCACHE 选项的 Sequence ？](https://www.oceanbase.com/knowledge-base/oceanbase-database-1000000000659501)

下一篇

[OceanBase 数据库如何手动关闭 DBLink](https://www.oceanbase.com/knowledge-base/oceanbase-database-1000000000209981) ![有帮助](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) 咨询热线
