---
title: Oracle 租户创建 PACKAGE BODY 报错 4016 的原因及解决方法-OceanBase数据库使用指南
description: 了解OceanBase数据库在实际应用中关于Oracle 租户创建 PACKAGE BODY 报错 4016 的原因及解决方法相关的常见问题和使用技巧，帮助您快速解决Oracle 租户创建 PACKAGE BODY 报错 4016 的原因及解决方法的难题。
---
切换语言

- 简体中文
- English

划线反馈

# Oracle 租户创建 PACKAGE BODY 报错 4016 的原因及解决方法

更新时间：2026-05-29 08:46

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

## 问题现象

Oracle 租户创建包体失败，报错 4016。

```shell
create or replace package body pkg_2024112700105312380 as
    function BITOR(c1 varchar2) return varchar2 as
    begin
        return c1;
    end;

    procedure p1 as
        v varchar2(100);
        v_map match_identifymap_type;
    begin
        v_map(BITOR('a')) := 'aaa';
    end;
end;
/
ORA-600:internal error code,arguments:-4016,Internal error

```

关键日志信息。

```shell
-- 日志打印 BITOR 函数无效
[2024-12-09 11:15:51.716886] WDIAG [SQL] print (ob_raw_expr_printer.cpp:3361) [295946][T1002_L0_G0][T1002][xxxxx-xxxxx-xxxxx-xxxxx] [lt=7][errcode=-4016] object info is null(ret=-4016, expr={item_type:"T_FUN_UDF", result_type:{meta:{type:"NUMBER", collation:"binary", coercibility:"NUMERIC"}, accuracy:{length:32767, precision:-1, scale:-85}, flag:0, calc_type:{type:"NULL", collation:"invalid_type", coercibility:"INVALID"}}, expr_info:["IS_FUNC", "IS_STATE_FUNC", "IS_PL_UDF", "CNT_CONST_EXPR", "CNT_CONST", "CNT_FUNC", "CNT_STATE_FUNC", "CNT_PL_UDF", "UNKNOWN"], rel_id:[], database:"", package_name:"pkg_2024112700105312380", func:"BITOR", 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:[{type:0, id1:-1, id2:-1, id3:-1}, {type:0, id1:-1, id2:-1, id3:-1}], children:[{item_type:"T_OP_MUL", result_type:{meta:{type:"NUMBER", collation:"binary", coercibility:"NUMERIC"}, accuracy:{length:-1, precision:-1, scale:-85}, flag:0, calc_type:{type:"NUMBER", collation:"binary", coercibility:"NUMERIC"}}, expr_info:["IS_CONST_EXPR", "CNT_CONST", "UNKNOWN"], rel_id:[], children:[{item_type:"T_OBJ_ACCESS_REF", result_type:{meta:{type:"NUMBER", collation:"binary", coercibility:"NUMERIC"}, accuracy:{length:-1, precision:38, scale:0}, flag:0, calc_type:{type:"NULL", collation:"invalid_type", coercibility:"INVALID"}}, expr_info:["IS_CONST_EXPR", "UNKNOWN"], rel_id:[], children:[]}, {item_type:"T_INT", result_type:{meta:{type:"NUMBER", collation:"binary", coercibility:"NUMERIC"}, accuracy:{length:1, precision:-1, scale:-85}, flag:1, calc_type:{type:"NULL", collation:"invalid_type", coercibility:"INVALID"}}, expr_info:["IS_CONST", "CNT_CONST"], rel_id:[], value:{"NUMBER":"4"}}]}, {item_type:"T_FUN_SYS_ORA_TRUNC", result_type:{meta:{type:"NUMBER", collation:"binary", coercibility:"NUMERIC"}, accuracy:{length:-1, precision:-1, scale:-85}, flag:0, calc_type:{type:"NULL", collation:"invalid_type", coercibility:"INVALID"}}, expr_info:["IS_FUNC", "IS_CONST_EXPR", "CNT_CONST", "CNT_FUNC", "UNKNOWN"], rel_id:[], expr_info:["IS_CONST_EXPR", "UNKNOWN"], rel_id:[], children:[]}, {item_type:"T_INT", result_type:{meta:{type:"NUMBER", collation:"binary", coercibility:"NUMERIC"}, accuracy:{length:2, precision:-1, scale:-85}, flag:1, calc_type:{type:"NULL", collation:"invalid_type", coercibility:"INVALID"}}, expr_info:["IS_CONST", "CNT_CONST"], rel_id:[], value:{"NUMBER":"64"}}]}], enum_set_values:[], dblink_name:"", dblink_id:18446744073709551615}]}, tenant_id=1002)
[2024-12-09 11:15:51.716963] WDIAG [SQL] print (ob_raw_expr_printer.cpp:179) [295946][T1002_L0_G0][T1002][xxxxx-xxxxx-xxxxx-xxxxx] [lt=7][errcode=-4016] fail to print expr(ret=-4016)

```

## 触发条件

PACKAGE BODY 中 FUNCTION 如果没有在 HEADER 中申明，且在 BODY 中级联调用时会报 -4016。

## 问题原因

1. PACKAGE BODY 中定义了 BITOR 函数，并且在 BODY 中又调用了这个 BITOR 函数，在这种级联调用的情况下就会出现这个报错。
 2. 原生 Oracle 没有问题，在 V4.2.1 BP10 Hotfix2（oceanbase-4.2.1.10-110020012024120420）之前版本，存在 Oracle PL 兼容性问题

## 问题的风险及影响

创建 PACKAGE 报错 -4016。

## 影响租户

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

## 适用版本

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

## 解决方法及规避方式

在包头中提前声明 BITOR 函数（将 FUNCTION 在 HEADER 中申明一下）。

Previous

[OceanBase 数据库 V4.x 集群内，PL 内使用绑定变量方式执行动态 SQL 时出现 inconsistent datatypes 且伴随出现日志 fail to judge same type](https://www.oceanbase.com/knowledge-base/oceanbase-database-1000000002842436)

Next

[从 Oracle 迁移数据至 OceanBase 的重要检查点](https://www.oceanbase.com/knowledge-base/oceanbase-database-20000000094) ![有帮助](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) 咨询热线
