---
title: Oracle 租户执行递归 CTE 报错：-4016，内部错误-OceanBase数据库使用指南
description: 了解OceanBase数据库在实际应用中关于Oracle 租户执行递归 CTE 报错：-4016，内部错误相关的常见问题和使用技巧，帮助您快速解决Oracle 租户执行递归 CTE 报错：-4016，内部错误的难题。
---
切换语言

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

划线反馈

# Oracle 租户执行递归 CTE 报错：-4016，内部错误

更新时间：2026-05-26 09:46

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

## 问题描述

Oracle 租户执行递归 CTE 报错-4016：

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

```

1. 创建测试表。

   ```shell
   obclient [SYS]> create table tb(id varchar(3) , pid varchar(3) , name varchar(10));
   Query OK, 0 rows affected (0.030 sec)

   ```
 2. 插入测试数据。

   ```shell
   obclient [SYS]> insert into tb values('002' , 0 , '浙江省');
   Query OK, 1 row affected (0.004 sec)

   ```

   ```shell
   obclient [SYS]> insert into tb values('001' , 0 , '广东省');
   Query OK, 1 row affected (0.000 sec)

   ```

   ```shell
   obclient [SYS]> insert into tb values('003' , '002' , '衢州市');
   Query OK, 1 row affected (0.000 sec)

   ```

   ```shell
   obclient [SYS]> insert into tb values('004' , '002' , '杭州市') ;
   Query OK, 1 row affected (0.000 sec)

   ```

   ```shell
   obclient [SYS]> insert into tb values('005' , '002' , '湖州市');
   Query OK, 1 row affected (0.000 sec)

   ```

   ```shell
   obclient [SYS]> insert into tb values('006' , '002' , '嘉兴市') ;
   Query OK, 1 row affected (0.000 sec)

   ```

   ```shell
   obclient [SYS]> insert into tb values('007' , '002' , '宁波市');
   Query OK, 1 row affected (0.000 sec)

   ```

   ```shell
   obclient [SYS]> insert into tb values('008' , '002' , '绍兴市') ;
   Query OK, 1 row affected (0.000 sec)

   ```

   ```shell
   obclient [SYS]> insert into tb values('009' , '002' , '台州市');
   Query OK, 1 row affected (0.000 sec)

   ```

   ```shell
   obclient [SYS]> insert into tb values('010' , '002' , '温州市') ;
   ues('012' , '002' , '金华Query OK, 1 row affected (0.000 sec)

   ```

   ```shell
   obclient [SYS]> insert into tb values('011' , '002' , '丽水市');
   Query OK, 1 row affected (0.000 sec)

   ```

   ```shell
   obclient [SYS]> insert into tb values('012' , '002' , '金华市') ;
   Query OK, 1 row affected (0.000 sec)

   ```shell
   obclient [SYS]> insert into tb values('013' , '002' , '舟山市');
   Query OK, 1 row affected (0.000 sec)

   ```

   ```shell
   obclient [SYS]> insert into tb values('014' , '004' , '上城区') ;
   Query OK, 1 row affected (0.000 sec)

   ```

   ```shell
   obclient [SYS]> insert into tb values('015' , '004' , '下城区');
   Query OK, 1 row affected (0.000 sec)

   ```

   ```shell
   obclient [SYS]> insert into tb values('016' , '004' , '拱墅区') ;
   Query OK, 1 row affected (0.000 sec)

   ```

   ```shell
   obclient [SYS]> insert into tb values('017' , '004' , '余杭区') ;
   Query OK, 1 row affected (0.000 sec)

   ```

   ```shell
   obclient [SYS]> insert into tb values('018' , '011' , '金东区') ;
   Query OK, 1 row affected (0.000 sec)

   ```

   ```shell
   obclient [SYS]> insert into tb values('019' , '001' , '广州市') ;
   Query OK, 1 row affected (0.000 sec)

   ```

   ```shell
   obclient [SYS]> insert into tb values('020' , '001' , '深圳市') ;
   Query OK, 1 row affected (0.000 sec)

   ```
 3. 提交插入数据

   ```shell
   obclient [SYS]> commit;
   Query OK, 0 rows affected (0.001 sec)

   ```
 4. 执行递归 CTE 语句。

   ```shell
   obclient [SYS]> with RECURSIVE cte as
   (select a.id,a.name,a.pid from tb a where id='002'
   union all  
   select k.id,k.name,k.pid  from tb k inner join cte c on c.id = k.pid)select id,name from cte order by id;

   ```

MySQL 租户正常支持递归 CTE：

1. 执行如下 递归 CTE 语句。

   ```shell
   obclient [mysql]> with RECURSIVE cte as   (   select a.id,a.name,a.pid from tb a where id='002'  union all   select k.id,k.name,k.pid  from tb k inner join cte c on c.id = k.pid   )select id,name from cte order by id;

   ```

   输出结果如下：

   ```shell
    +------+-----------+
    | id   | name      |
    +------+-----------+
    | 002  | 浙江省    |
    | 003  | 衢州市    |
    | 004  | 杭州市    |
    | 005  | 湖州市    |
    | 006  | 嘉兴市    |
    | 007  | 宁波市    |
    | 008  | 绍兴市    |
    | 009  | 台州市    |
    | 010  | 温州市    |
    | 011  | 丽水市    |
    | 012  | 金华市    |
    | 013  | 舟山市    |
    | 014  | 上城区    |
    | 015  | 下城区    |
    | 016  | 拱墅区    |
    | 017  | 余杭区    |
    | 018  | 金东区    |
    +------+-----------+
    17 rows in set (0.008 sec)

   ```

## 问题原因

OceanBase Oracle 租户不支持 WITH 递归语法。

## 适用版本

OceanBase 数据库 V2.x，V3.x 版本。

## 解决方法

Oracle 租户需要使用 CONNECT BY 语法修改，具体修改SQL 如下：

```shell
obclient [SYS]> select id,name from tb start with tb.id = '002' connect by prior tb.id = tb.pid order by id;

```

输出结果如下：

```shell
 +------+-----------+
 | ID   | NAME      |
 +------+-----------+
 | 002  | 浙江省    |
 | 003  | 衢州市    |
 | 004  | 杭州市    |
 | 005  | 湖州市    |
 | 006  | 嘉兴市    |
 | 007  | 宁波市    |
 | 008  | 绍兴市    |
 | 009  | 台州市    |
 | 010  | 温州市    |
 | 011  | 丽水市    |
 | 012  | 金华市    |
 | 013  | 舟山市    |
 | 014  | 上城区    |
 | 015  | 下城区    |
 | 016  | 拱墅区    |
 | 017  | 余杭区    |
 | 018  | 金东区    |
 +------+-----------+
 17 rows in set (0.003 sec)

```

上一篇

[查询语句中使用分隔符（SEPARATOR）导致执行慢的原因和解决方法](https://www.oceanbase.com/knowledge-base/oceanbase-database-1000000001680373)

下一篇

[查询 union 结果集和拆分单独执行 SQL 结果不符合预期](https://www.oceanbase.com/knowledge-base/oceanbase-database-1000000000075120) ![有帮助](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) 咨询热线
