You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Oracle21c存储过程中INDICES OF循环触发ORA-00600编译错误

存储过程编译报错ORA-00600的原因分析

问题场景

以下存储过程无法编译:

CREATE PROCEDURE P_Test
IS
   TYPE intvec_t IS TABLE OF PLS_INTEGER INDEX BY PLS_INTEGER;
   vec intvec_t := intvec_t(3 => 10, 1 => 11, 100 => 34);
BEGIN
   FOR i IN INDICES OF vec LOOP
      null;
   END LOOP;
END;

报错信息:

ERROR at line 1:
ORA-00600: internal error code, arguments: [kglidinsi1], [1], [], [], [], [], [], [], [], [], [], []

但结构相似的匿名块可以正常编译执行:

DECLARE
   TYPE intvec_t IS TABLE OF PLS_INTEGER INDEX BY PLS_INTEGER;
   vec intvec_t := intvec_t(3 => 10, 1 => 11, 100 => 34);
BEGIN
   FOR ty IN INDICES OF vec LOOP
      null;
   END LOOP;
END;

原因分析

这是Oracle数据库的内部编译器bug。当在存储过程中使用INDICES OF循环遍历本地定义的关联数组类型时,PL/SQL编译器在处理类型元数据的逻辑模块(对应错误参数kglidinsi1)触发了内部异常。

匿名块与存储过程的编译逻辑存在差异:匿名块属于一次性执行的动态代码,编译器对其本地类型的处理流程更简单;而存储过程作为持久化数据库对象,编译器需要为其类型生成更复杂的元数据存储结构,这个过程中出现了逻辑漏洞,导致ORA-00600内部错误。

这类bug通常关联特定Oracle版本,需查看对应版本的官方补丁列表,应用Oracle发布的修复补丁解决问题。

内容的提问来源于stack exchange,提问作者Ольга Зайчук

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 10:59:52