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

PL/SQL报错PLS-00382:cursor数据赋值给VARRAY时类型错误

错误原因

PLS-00382报错的核心原因是你将游标循环的行记录变量i直接用作了VARRAY类型字段t_fabricante_reg_sanitario的下标。VARRAY的下标要求为正整数,而i是游标返回的行记录类型,二者类型完全不匹配,因此触发类型错误。除此之外VARRAY使用前未初始化、未主动扩展长度也会后续引发运行时错误。

修复方案

修改后的代码逻辑如下:

  1. 新增专门的整数变量作为VARRAY的下标
  2. 使用VARRAY前先完成初始化
  3. 每次赋值前扩展VARRAY长度,用整数下标完成赋值
-- 原有变量定义后新增VARRAY下标计数变量
v_cont            number :=1;
v_arr_idx         number :=1; -- 新增

...
FOR reg1 IN ... LOOP
  -- 进入内层游标循环前先初始化VARRAY
  p_Tabla(v_cont).t_fabricante_reg_sanitario := V_REG_SANITARIO();
  v_arr_idx := 1; -- 每次处理新记录时重置下标
  for i in c1(v_provr_gen, v_provr_trabajo) loop              
      -- 扩展VARRAY长度
      p_Tabla(v_cont).t_fabricante_reg_sanitario.EXTEND;
      -- 用整数下标完成赋值
      p_Tabla(v_cont).t_fabricante_reg_sanitario(v_arr_idx) := i.reg_sanitario;
      v_arr_idx := v_arr_idx + 1;
      -- 可选:增加长度校验,避免超过VARRAY定义的最大长度10
      if v_arr_idx > 10 then
          exit;
      end if;
  end loop;
...
end loop;
注意事项
  • 你定义的V_REG_SANITARIO是最大长度为10的VARRAY,如果游标返回的记录数超过10,扩展长度时会触发报错,可根据业务需求提前加截断逻辑,或者将VARRAY改为无最大长度限制的嵌套表类型。
  • 所有PL/SQL集合类型使用前必须初始化,未初始化直接赋值会触发运行时错误。

内容的提问来源于stack exchange,提问作者Golan_trevize

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 09:42:01