---
title: OceanBase 数据库 Oracle 模式租户 package 私有 UDF，级联调用时报错 object info is null(ret=-4016 的原因及解决方法-OceanBase数据库使用指南
description: 了解OceanBase数据库在实际应用中关于 OceanBase 数据库 Oracle 模式租户 package 私有 UDF，级联调用时报错 object info is null(ret=-4016 的原因及解决方法相关的常见问题和使用技巧，帮助您快速解决 OceanBase 数据库 Oracle 模式租户 package 私有 UDF，级联调用时报错 object info is null(ret=-4016 的原因及解决方法的难题。
---
切换语言

- 简体中文
- English

划线反馈

# OceanBase 数据库 Oracle 模式租户 package 私有 UDF，级联调用时报错 object info is null(ret=-4016 的原因及解决方法

更新时间：2025-05-13 08:41

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

## 问题现象

OceanBase 数据库 Oracle 模式租户 package 私有 UDF，级联调用时报错 `-4016, Internal error`。

```shell
obclient> create or replace package pkg0 is
    -> type rd is record(c0 int,c1 int);
    -> procedure p0;
    -> end;
    -> /
Query OK, 0 rows affected (0.04 sec)

obclient> create or replace package body pkg0 is function f0 return rd is r rd;
    -> begin
    ->  select 1,2 into r from dual;
    -> return r;
    -> end;
    -> procedure p0 is
    ->  begin
    ->   dbms_output.put_line(f0().c0);
    ->  end;
    -> end;
    -> /
ORA-00600: internal error code, arguments: -4016, Internal error
at  line : 8, col : 24

```

关键日志信息。

```shell
[2024-12-01 17:12:04.506259] WDIAG [SQL] print (ob_raw_expr_printer.cpp:3359) [27336][T1004_L0_G0][T1004][xxxxx-xxxxx-xxxxx-xxxxx] [lt=13][errcode=-4016] object info is null(ret=-4016, expr={item_type:"T_FUN_UDF", result_type:{meta:{type:"EXT", collation:"invalid_type", coercibility:"INVALID"}, accuracy:{length:486539265, precision:1956, scale:0}, flag:0, calc_type:{type:"NULL", collation:"invalid_type", coercibility:"INVALID"}}, expr_info:["IS_FUNC", "IS_PL_UDF", "IS_CONST_EXPR", "CNT_FUNC", "CNT_PL_UDF"], rel_id:[], database:"", package_name:"PKG0", func:"F0", udf_id:2, pkg_id:18446744073709551615, type_id:18446744073709551615, subprogram_path:[], is_deterministic:false, is_udt_udf:false, is_return_sys_cursor:false, loc:0, udf_schema_version:-1, pkg_schema_version:-1, is_pkg_body_udf:true, is_return_sys_cursor:false, is_aggregate_udf:false, is_parallel_enable:false, is_aggr_udf_distinct:false, loc:0, is_udt_cons:false, params_desc_v2:[], children:[]}, tenant_id=1004)
[2024-12-01 17:12:04.506286] WDIAG [SQL] print (ob_raw_expr_printer.cpp:179) [27336][T1004_L0_G0][T1004][xxxxx-xxxxx-xxxxx-xxxxx] [lt=13][errcode=-4016] fail to print expr(ret=-4016)
[2024-12-01 17:12:04.506289] WDIAG [SQL] do_print (ob_raw_expr_printer.cpp:83) [27336][T1004_L0_G0][T1004][xxxxx-xxxxx-xxxxx-xxxxx] [lt=13][errcode=-4016] fail to print expr(ret=-4016)

```

## 问题原因

问题确认为产品缺陷，package 私有 UDF，级联调用时未能找到，导致创建时报错 -4016。

## 问题的风险及影响

创建 PL 报错。

## 影响租户

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

## 适用版本

OceanBase 数据库 V4.2.1 BP10（oceanbase-4.2.1.10-110000072024111216）之前版本。

## 解决方法

升级至问题已修复版本。目前已修复的版本包括 OceanBase 数据库 V4.2.3（oceanbase-4.2.3.0-100000052024041220）及之后版本。

## 规避方式

定义中间变量，不级联调用或将 UDF 在 package header 中申明。

本例可改为如下写法绕过。

![image](https://obbusiness-private.oss-cn-shanghai.aliyuncs.com/doc/img/knowledge-base/database/sql/20250409oborcl-mode-tenant-package-private-udf.png)

Previous

[含同义词的包体编译报错 -5559](https://www.oceanbase.com/knowledge-base/oceanbase-database-1000000000209967)

Next

[OceanBase 数据库 Mysql 模式下存储过程内是否支持创建临时表](https://www.oceanbase.com/knowledge-base/oceanbase-database-1000000000267167) ![有帮助](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) 咨询热线
