---
title: Oracle 模式下对触发器中使用 insert all 语句的表进行操作报 ORA-00904 错误-OceanBase数据库使用指南
description: 了解OceanBase数据库在实际应用中关于 Oracle 模式下对触发器中使用 insert all 语句的表进行操作报 ORA-00904 错误相关的常见问题和使用技巧，帮助您快速解决 Oracle 模式下对触发器中使用 insert all 语句的表进行操作报 ORA-00904 错误的难题。
---
切换语言

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

划线反馈

# Oracle 模式下对触发器中使用 insert all 语句的表进行操作报 ORA-00904 错误

更新时间：2024-01-22 01:56

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

## 问题描述

在 OceanBase 数据库 Oracle 租户下创建 `insert all` 触发器后对表进行操作，报错 ORA-00904，具体报错信息如下。

```shell
ORA-00904: invalid identifier 'VIEW1.:NEW.C1' in 'field list' at CHZ.TRI.BEFORE_ROW

```

表结构及对应的触发器语句如下。

- 创建测试表 t1，t2，t3。

  ```sql
  create table t1 (c1 int, c2 int);

  ```

  ```sql
  create table t2 (c1 int, c2 int);

  ```

  ```sql
  create table t3 (c1 int, c2 int);

  ```
 - 为表 t1 创建使用 `insert all` 的触发器。

  ```sql
  create or replace trigger tri before insert or update or delete on t1 for each row
  begin
    insert all into t2 into t3 select :new.c1, :new.c2 from dual;
  end;
  /

  ```

## 适用版本

OceanBase 数据库 V2.1.x、V2.2.x、V3.1.x、V3.2.x 版本。

## 问题原因

PL 中未支持 insert all 语句类型。

## 解决方法

将 insert all 语句拆分成简单 insert 语句进行绕过。

拆分后的 insert 语句如下。

```sql
create or replace trigger tri before insert or update or delete on t1 for each row
begin
  insert into t2 select :new.c1, :new.c2 from dual;
  insert into t3 select :new.c1, :new.c2 from dual;
end;
/

```

上一篇

[批量插入数据报错：Parameter index out of bonds 的原因和解决方法](https://www.oceanbase.com/knowledge-base/oceanbase-database-1000000000664388)

下一篇

[INSERT ALL 报错 -4024, Buffer not enough](https://www.oceanbase.com/knowledge-base/oceanbase-database-1000000000322505) ![有帮助](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) 咨询热线
