---
title: Oracle 模式 INSERT ALL INTO 报错 ORA-02291-OceanBase数据库使用指南
description: 了解OceanBase数据库在实际应用中关于Oracle 模式 INSERT ALL INTO 报错 ORA-02291相关的常见问题和使用技巧，帮助您快速解决Oracle 模式 INSERT ALL INTO 报错 ORA-02291的难题。
---
切换语言

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

划线反馈

# Oracle 模式 INSERT ALL INTO 报错 ORA-02291

更新时间：2026-05-28 02:06

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

本文介绍 OceanBase 数据库 Oracle 模式下执行 INSERT ALL INTO 语句报错 ORA-02991 的原因和解决方法。

## 适用版本

OceanBase 数据库 V4.1.x 之前的版本。

## 问题现象

OceanBase 数据库 Oracle 模式下执行 INSERT ALL INTO 语句报错。

```shell
ORA-02291: integrity constraint violated - parent key not found

```

示例如下。

1. 执行以下命令创建表。

   ```shell
   obclient [SYS]> create table test(
       ->   id varchar2(10),
       ->   name varchar2(10),
       ->   constraint pk1 primary key(id),
       ->   constraint fk1 foreign key(name) references test(id)
       -> );
   Query OK, 0 rows affected (0.074 sec)

   ```
 2. 执行以下命令插入数据。

   ```shell
   obclient [SYS]> insert all into test(id, name) values('1', '1')
       -> into test(id, name) values('2', '1')
       -> select * from dual;
   ORA-02291: integrity constraint violated - parent key not found

   ```

Oracle 数据库执行正常。

1. 创建表。

   ```shell
   SQL> create table test(
   id varchar2(10),
   name varchar2(10),
   constraint pk1 primary key(id),
   constraint fk1 foreign key(name) references test(id)
   );

   Table created.

   ```
 2. 插入数据。

   ```shell
   SQL> insert all into test(id, name) values('1', '1')
   into test(id, name) values('2', '1')
   select * from dual;

   2 rows created.

   ```

OceanBase 数据库 V4.2.x 版本运行正常。

1. 创建表。

   ```shell
   obclient [SYS]> create table test(
       ->   id varchar2(10),
       ->   name varchar2(10),
       ->   constraint pk1 primary key(id),
       ->   constraint fk1 foreign key(name) references test(id)
       -> );
   Query OK, 0 rows affected (0.206 sec)

   ```shell
   obclient [SYS]> insert all into test(id, name) values('1', '1')
       -> into test(id, name) values('2', '1')
       -> select * from dual;
   Query OK, 2 rows affected (0.031 sec)

   ```

## 问题原因

该问题是 OceanBase 数据库 V4.1.x 之前版本的已知缺陷，V4.1.x 之前版本的外键检查是在语句进行 DML 操作写入之前做的；对于一条语句插入多行的情况，后面的行对前面的行进行检查时发现前面的行实际还没有写入，所以会检查失败。

## 解决方法

目前老版本暂时没有修复计划，可以通过拆分成多个 INSERT 语句绕过。

```shell
obclient [SYS]> insert into test(id, name) values('1', '1');
Query OK, 1 row affected (0.014 sec)

```

```shell
obclient [SYS]> insert into test(id, name) values('2', '1');
Query OK, 1 row affected (0.009 sec)

```

上一篇

[循环 INSERT 执行时间越来越慢](https://www.oceanbase.com/knowledge-base/oceanbase-database-1000000000246037)

下一篇

[插入数据时提示重复的输入，错误代码 ERROR 1062](https://www.oceanbase.com/knowledge-base/oceanbase-database-1000000000217891) ![有帮助](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) 咨询热线
