首批通过分布式安全可靠测评,为关键业务系统打造
OceanBase 数据库 Oracle 租户 PL 调用执行报错 -5838,原生 Oracle 不报错的原因和解决方法
更新时间:2026-05-29 08:46
问题现象
在原生 Oracle 数据库上执行 PL 不报错,而在 OceanBase 数据库 Oracle 租户上执行 PL 报错-5838,如下图所示。

关键日志信息,如下:
[2025-07-24 16:39:49.907110] WDIAG [SQL] spi_cursor_fetch (ob_spi.cpp:4503) [48523][T1004_L0_G0][T1004][xxxxx-xxxxx-xxxxx-xxxxx] [lt=10][errcode=-4026] fail to exec do_cursor_fetch(ctx, cursor, OB_INVALID_ID != cursor->get_id() || (package_id != OB_INVALID_ID && OB_INVALID_ID == routine_id), into_exprs, into_count, column_types, type_count, exprs_not_null_flag, pl_integer_ranges, is_bulk, limit, return_types, return_type_count, is_type_record)(ret=-4026)
[2025-07-24 16:39:49.907163] WDIAG [PL] update_first_impl (ob_pl_user_type.cpp:3942) [48523][T1004_L0_G0][T1004][xxxxx-xxxxx-xxxxx-xxxxx] [lt=10][errcode=-5838] pl collection is not inited(ret=-5838)
问题原因
该问题属于 OceanBase 缺陷,因为内部逻辑导致赋值出现异常,从而初始化失败,报错 -5838。
问题的风险及影响
PL 执行报错。
适用版本
OceanBase 数据库 V4.x 版本。
解决方法
升级至问题已修复版本。目前已修复的版本包括 OceanBase 数据库 V4.2.5 BP3(oceanbase-4.2.5.3-103000142025033110)及之后版本。
规避方式
修改 PL 的逻辑。